无法处理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'] 

好像你会得到你想要的东西。

+0

为什么Web服务输出是一个数组而不是散列?我想回到哈希,因为我在其他类似的情况下。 – user502052 2011-03-10 03:00:03

+0

它在我看来像:accounts = Account.where(:id => ids)会返回一个结果数组。 “ids”似乎暗示你可以在那里传入一组有效的id。仅仅因为只有一个并不意味着函数会停止以数组形式返回结果。虽然这只是我的怀疑。 – ebeland 2011-03-10 03:06:38

+0

对不起,我错了。为了使我的代码正常工作,也许我必须有一个Web服务响应:“{\”account \“:{\”firstname \“:\”Semio \“,\”lastname \“:\”Iaven \ “}}”'而不是'“[{\”account \“:{\”firstname \“:\”Semio \“,\”lastname \“:\”Iaven \“\”}}]“'。但是Web服务应该简单地在'response.body'中返回一个JSON字符串? – user502052 2011-03-10 03:12:38