我有一个远程服务器返回的以下
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": "Chris Rivers",
您将获得一个LoadError尝试使用ActiveSupport :: JSON.decode对其进行解码
MultiJson::LoadError: 399: unexpected token at ‘{“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\"}]}"
你会看到迭代“用户”中的每个对象都没有问题(x下面是上面的JSON字符串)
[8] pry(main)> ActiveSupport::JSON.decode(x)["users"].map { |user| user["name"] } => ["Chris Rivers","Peter Curley"]