1

この文字列をハッシュに変換する必要があります

{lhs: "1 Euro",rhs: "0.809656799 British pounds",error: "",icc: true}

私はこのようにしてみました

JSON.parse('{lhs: "1 Euro",rhs: "0.809656799 British pounds",error: "",icc: true}'.to_s)
JSON::ParserError: 757: unexpected token at '{lhs: "1 Euro",rhs: "0.809656799 British pounds",error: "",icc: true}'

ヒントはありますか?

参考までに http://www.google.com/ig/calculator?hl=en&q=1EUR=?GBP

4

1 に答える 1

2

文字列は有効な JSON トランスポートではありません。すべてのキーは引用符で囲む必要があります。

たとえば、これは機能します:

1.9.3:1 > require 'json'
 => true 

1.9.3:2 > s = '{"lhs": "1 Euro","rhs": "0.809656799 British pounds","error": "", "icc": true}'
 => "{\"lhs\": \"1 Euro\",\"rhs\": \"0.809656799 British pounds\",\"error\": \"\", \"icc\": true}" 

1.9.3:3 > JSON.parse(s)
 => {"lhs"=>"1 Euro", "rhs"=>"0.809656799 British pounds", "error"=>"", "icc"=>true}

ハッシュ文字列を有効な JSON トランスポートに変換できない場合は、これでうまくいくはずです。

1.9.3:1 > s = '{lhs: "1 Euro",rhs: "0.809656799 British pounds",error: "",icc: true}'
 => "{lhs: \"1 Euro\",rhs: \"0.809656799 British pounds\",error: \"\",icc: true}" 

1.9.3:2 > s.gsub(/(?<key>\w+)\:/, '"\k<key>":')
 => "{\"lhs\": \"1 Euro\",\"rhs\": \"0.809656799 British pounds\",\"error\": \"\",\"icc\": true}"

1.9.3:3 > JSON.parse(s.gsub(/(?<key>\w+)\:/, '"\k<key>":'))
 => {"lhs"=>"1 Euro", "rhs"=>"0.809656799 British pounds", "error"=>"", "icc"=>true} 

regex: を使用し/(?<key>\w+)\:/てキーを取得し、gsub引用符を追加するために使用します。

于 2012-10-16T15:55:37.407 に答える