JSON.parse无效

时间:2016-01-20 20:04:32

标签: ruby json

我试图解析帖子请求返回的JSON。我有以下代码:

response = RestClient.post "http://localhost:4567", request.body.read,:content_type => :json, :accept => :json
result = JSON.parse('#{response.body}')

它给了我以下错误:

JSON::ParserError - 757: unexpected token at '#{response.body}':

我已检查response.body是否返回正确的JSON。如果我复制JSON的内容并将其粘贴到JSON.parse,它就能完美运行。但是,当我使用变量时,它不起作用。

2 个答案:

答案 0 :(得分:4)

单引号不会扩展插值。 obj.calculateJSON.parse(response.body)可以使用。

答案 1 :(得分:1)

由于您提到response.body是一个字符串,因此您可以执行JSON.parse(response.body)。你不需要插值它。

根据您在评论中提供的示例,它可以正常工作:

2.1.2-perf :007 > s =  '{ "age_result": [ { "column_id": [ "B01001003", "B01001027" ], "name": "Under 5 years", "number": [ 6774.0, 6416.0 ] }, { "column_id": [ "B01001004", "B01001028" ], "name": "5 to 9 years", "number": [ 5981.0, 6470.0 ] }] }'
 => "{ \"age_result\": [ { \"column_id\": [ \"B01001003\", \"B01001027\" ], \"name\": \"Under 5 years\", \"number\": [ 6774.0, 6416.0 ] }, { \"column_id\": [ \"B01001004\", \"B01001028\" ], \"name\": \"5 to 9 years\", \"number\": [ 5981.0, 6470.0 ] }] }"
2.1.2-perf :008 > JSON.parse(s)
 => {"age_result"=>[{"column_id"=>["B01001003", "B01001027"], "name"=>"Under 5 years", "number"=>[6774.0, 6416.0]}, {"column_id"=>["B01001004", "B01001028"], "name"=>"5 to 9 years", "number"=>[5981.0, 6470.0]}]}