2016-01-20 36 views
-5

我想解析一個發佈請求返回的JSON。我有以下代碼:JSON.parse不工作

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中,它可以很好地工作。但是,當我使用該變量它不起作用。

+1

什麼是你的問題? – sawa

+0

如何解決它以使解析工作? –

+0

你可以顯示什麼'response.body'看起來像? – Atri

回答

4

單引號不會擴展插值。 JSON.parse(response.body)JSON.parse("#{response.body}")應能工作。

+0

JSON.parse(response.body)不起作用。它告訴我:錯誤TypeError:沒有將數組隱式轉換爲字符串。我用is_a?檢查response.body是否是一個字符串,輸出是否爲真。 –

+0

如果'response.body'是一個數組,則@JackLi使用'response.body.to_s'。 – Atri

+0

@Atri response.body是一個字符串。我檢查了is_a? –

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]}]} 
相關問題