2016-07-21 6 views
1

ruby​​(またはhttp://json.parser.online.fr/)で次のJSONを解析しようとすると、エラーが発生しますが、その理由がわかりません。JSONの解析でエラーが返る

JSONを解析する:

"{\"RED\"=>{\"t1\"=>0, \"t2\"=>2}, 
    \"DANGEROUS_SITUATION\"=>{\"t1\"=>28, \"t2\"=>33}, 
    \"SUB\"=>{\"t1\"=>1, \"t2\"=>0}, \"RED_CARS\"=>{\"t1\"=>0, \"t2\"=>0}, 
    \"CRASH\"=>{\"t1\"=>10, \"t2\"=>6}, \"TRICKS\"=>{\"t1\"=>2, 
    \"t2\"=>3}, \"FREE_TRIES\"=>{\"t1\"=>9, \"t2\"=>5}, 
    \"OWNERS\"=>{\"t1\"=>48, \"t2\"=>52}, \"ERRORS\"=>{\"t1\"=>5, 
    \"t2\"=>9}, \"YELLOW_CARS\"=>{\"t1\"=>0, \"t2\"=>0}, 
    \"FANS\"=>{\"t1\"=>40, \"t2\"=>41}}" 

編集を:以下ceommentedとして、これはJSONではなく、文字列化Rubyのハッシュ、Rubyのハッシュにして、これを変換する方法はありますか?

+0

これはJSONではありません。これは文字列化されたルビーハッシュです。したがって、それは解析できません(jsonパーサで) –

+0

これは、ルビーハッシュに変換する方法がありますか? – Reinier

+0

いくつかの方法がありますが、このコンテンツを作成したものを修正し、適切なjsonを発行するようにしてください。 JSONは有効なデータ交換形式です。文字列化されたルビーハッシュはそうではありません。 –

答えて

2

あなたはコロンのためにロケットをGSUBして、すなわち、文字列を解析することです。これを行うための最も安全な方法

stringified_hash = "{\"RED\"=>{\"t1\"=>0, \"t2\"=>2}, \"DANGEROUS_SITUATION\"=>{\"t1\"=>28, \"t2\"=>33}, \"SUB\"=>{\"t1\"=>1, \"t2\"=>0}, \"RED_CARS\"=>{\"t1\"=>0, \"t2\"=>0}, \"CRASH\"=>{\"t1\"=>10, \"t2\"=>6}, \"TRICKS\"=>{\"t1\"=>2, \"t2\"=>3}, \"FREE_TRIES\"=>{\"t1\"=>9, \"t2\"=>5}, \"OWNERS\"=>{\"t1\"=>48, \"t2\"=>52}, \"ERRORS\"=>{\"t1\"=>5, \"t2\"=>9}, \"YELLOW_CARS\"=>{\"t1\"=>0, \"t2\"=>0}, \"FANS\"=>{\"t1\"=>40, \"t2\"=>41}}" 
JSON.parse(stringified_hash.gsub('=>', ':') 

また、stringified_hashをハッシュに戻してから.to_jsonを呼び出すこともできますが、文字列に評価可能なコードがあれば、攻撃は可能です。

json = eval("{\"RED\"=>{\"t1\"=>0, \"t2\"=>2}, \"DANGEROUS_SITUATION\"=>{\"t1\"=>28, \"t2\"=>33}, \"SUB\"=>{\"t1\"=>1, \"t2\"=>0}, \"RED_CARS\"=>{\"t1\"=>0, \"t2\"=>0}, \"CRASH\"=>{\"t1\"=>10, \"t2\"=>6}, \"TRICKS\"=>{\"t1\"=>2, \"t2\"=>3}, \"FREE_TRIES\"=>{\"t1\"=>9, \"t2\"=>5}, \"OWNERS\"=>{\"t1\"=>48, \"t2\"=>52}, \"ERRORS\"=>{\"t1\"=>5, \"t2\"=>9}, \"YELLOW_CARS\"=>{\"t1\"=>0, \"t2\"=>0}, \"FANS\"=>{\"t1\"=>40, \"t2\"=>41}}").to_json 
0

予想されるJSON形式ではなく、そのようなものです:

{ 
"RED":{"t1":0, "t2":2}, 
"DANGEROUS_SITUATION":{"t1":28, "t2":33}, 
"SUB":{"t1":1, "t2":0}, 
"RED_CARS":{"t1":0, "t2":0} 
}