Ale*_*lov 6 ruby json ruby-on-rails
我有一个远程服务器返回的以下JSON字符串:
{
"users": [
{
"user_id": 1,
"name": "Chris Rivers",
},
{
"user_id": 3,
"name": "Peter Curley",
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想迭代用户.
ActiveSupport::JSON.decode(response.body)["users"].each do |user|
puts user["name"]
end
Run Code Online (Sandbox Code Playgroud)
据我所知,问题是:ruby不能识别ActiveSupport::JSON.decode(response.body)["users"]为数组,因此puts只返回第一个用户.
我该如何解决这个问题?
你粘贴的是无效的JSON.每个后面的尾随逗号"name"是一个问题
"name": "Chris Rivers",
Run Code Online (Sandbox Code Playgroud)
你会LoadError尝试解码这个ActiveSupport::JSON.decode
MultiJson :: LoadError:399:'{"user_id"处的意外标记:1,"name":"Chris Rivers",},{"user_id":3,"name":"Peter Curley",}]}'
如果我们清理JSON,将它变成ActiveSupport::JSON.decode可以理解的东西
"{\"users\": [{\"user_id\": 1,\"name\": \"Chris Rivers\"},{\"user_id\": 3,\"name\": \"Peter Curley\"}]}"
Run Code Online (Sandbox Code Playgroud)
你会看到迭代每个对象没有问题"users"(x下面是上面的JSON字符串)
[8] pry(main)> ActiveSupport::JSON.decode(x)["users"].map { |user| user["name"] }
=> ["Chris Rivers", "Peter Curley"]
Run Code Online (Sandbox Code Playgroud)
您的源数据实际上是否在每个用户的名称后面都有尾随逗号?我得到了一个解析错误,但是如果我删除它们,你的代码就像你想要的那样工作:
json = '{ "users": [ { "user_id": 1, "name": "Chris Rivers" }, { "user_id": 3, "name": "Peter Curley" } ]}'
ActiveSupport::JSON.decode(json)["users"].each do |user|
puts user["name"]
end
Run Code Online (Sandbox Code Playgroud)
问题不是没有识别数组,而是"name"元素之后的尾随逗号.
删除它们允许JSON解析正常进行:
pry(main)> ActiveSupport::JSON.decode(s)["users"]
=> [{"user_id" => 1, "name" => "Chris Rivers"},
{"user_id" => 3, "name" => "Peter Curley"}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11157 次 |
| 最近记录: |