为什么我的JSON.parse失败了?Ruby on Rails

4
我正在尝试将Flickr的API中的图片加载到Ruby on Rails应用程序中,但是在我的JSON.parse()行上出现了“意外标记”错误。
我在这里找到了另一个响应,在返回的JSON中,它的双引号被转义了,解决方法是在末尾添加.gsub,但我仍然收到错误消息。
有人知道问题是什么吗?
def add

@jsonresults = open("http://api.flickr.com/services/rest/?method=flickr.interestingness.getList&api_key=bb398c11934abb6d51bdd720020f6a4a&per_page=1&page=1&format=json&nojsoncallback=1").read
@images = JSON.parse(@jsonresults.to_json.gsub('\"', '"'))

end

错误信息:

JSON::ParserError in ImagesController#add

757: unexpected token at '"{"photos":{"page":1, "pages":500, "perpage":1, "total":500, "photo":[{"id":"8234011021", "owner":"24066605@N07", "secret":"b4c05df8c5", "server":"8341", "farm":9, "title":"Crescent Lake", "ispublic":1, "isfriend":0, "isfamily":0}]}, "stat":"ok"}"'
2个回答

5
调用返回的 JSON 看起来不错。将您的解析更改为以下内容:
@images = JSON.parse(@jsonresults)

1

这不是有效的JSON格式。外层的双引号不应该存在。以下是有效的版本:

'{"photos":{"page":1, "pages":500, "perpage":1, "total":500, "photo":[{"id":"8234011021", "owner":"24066605@N07", "secret":"b4c05df8c5", "server":"8341", "farm":9, "title":"Crescent Lake", "ispublic":1, "isfriend":0, "isfamily":0}]}, "stat":"ok"}'

我可以使用.chop来删除最后一个双引号...有什么建议可以去掉第一个双引号吗? - wolf2600
John Naegle的答案(https://dev59.com/gGvXa4cB1Zd3GeqPKpZj#13673841)解决了这个问题。就像他所说的那样,调用返回的JSON看起来非常正常。 - Matt Ball
糟糕,确实是这样。不知道为什么我试图把事情搞得过于复杂了。 - wolf2600
@json_results.chop.reverse.chop.reverse - s2t2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接