无法处理HTTP响应和解析JSON数据
问题描述:
我正在使用Ruby on Rails 3,我想解决以下代码的问题,其中Web客户端应用程序从使用Rack中间件的Web服务应用程序接收一些JSON数据以回应。无法处理HTTP响应和解析JSON数据
在Web客户端应用程序模型我有
response_parsed = JSON.parse(response.body)
if response_parsed["account"]
...
else
return response
end
在上面的代码中response.body
回来从使用Rack中间件向Web客户端响应Web服务应用程序:
accounts = Account.where(:id => ids)
[200, {'Content-Type' => 'application/json'}, accounts.to_json] # That is, response.body = accounts.to_json
数据传输正常,但出现以下错误
TypeError
can't convert String into Integer
*Application Trace*
lib/accounts.rb:107:in `[]'
该生产线107
对应
if response_parsed["account"]
...
在哪里,是什么问题?如何解决这个问题?
如果我尝试调试respons.body
我得到
# Note: this is an array!
"[{\"account\":{\"firstname\":\"Semio\",\"lastname\":\"Iaven\"\"}}]"
答
如果我说你已经知道的东西,请原谅我。
它看起来像你的回应是一个单一元素的数组,其中有一个散列作为第一个元素。因为响应是一个数组,所以当你使用[]时,它需要一个整数来表示要访问的数组中项目的索引,这就是错误信息的含义 - 它预期你会告诉它你想要的物品的整数值,但是你给它一个字符串。
如果你不是做:
response_parsed[0]['account']
好像你会得到你想要的东西。
为什么Web服务输出是一个数组而不是散列?我想回到哈希,因为我在其他类似的情况下。 – user502052 2011-03-10 03:00:03
它在我看来像:accounts = Account.where(:id => ids)会返回一个结果数组。 “ids”似乎暗示你可以在那里传入一组有效的id。仅仅因为只有一个并不意味着函数会停止以数组形式返回结果。虽然这只是我的怀疑。 – ebeland 2011-03-10 03:06:38
对不起,我错了。为了使我的代码正常工作,也许我必须有一个Web服务响应:“{\”account \“:{\”firstname \“:\”Semio \“,\”lastname \“:\”Iaven \ “}}”'而不是'“[{\”account \“:{\”firstname \“:\”Semio \“,\”lastname \“:\”Iaven \“\”}}]“'。但是Web服务应该简单地在'response.body'中返回一个JSON字符串? – user502052 2011-03-10 03:12:38