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