我正在解析的JSON对象位于http://api.4chan.org/3/catalog.json
这是我的Ruby代码:
['open-uri','nokogiri','json'].each{|g| require g}
json_test = File.open('json_test.JSON','r').read
board_cat_body = Nokogiri::HTML(open('http://api.4chan.org/3/catalog.json'))
puts JSON.parse(board_cat_body)
结果(这很长,所以我把它的一部分拿出来):
C:/Ruby193/lib/ruby/1.9.1/json/common.rb:148:in `parse': 387: unexpected token at '{"no":248019,"sticky":1,"closed":1,"now":"12\/19....
但是,如果我将http://api.4chan.org/3/catalog.json的内容复制并粘贴到本地JSON文件中并从该本地JSON文件解析,则没有问题。
有谁知道我做错了什么?
答案 0 :(得分:1)
删除Nokogiri电话。 JSON不是HTML。
['open-uri','json'].each{|g| require g}
json = JSON.parse(open('http://api.4chan.org/3/catalog.json').read)
puts json.inspect
答案 1 :(得分:1)
您在board_cat_body
中获得的文档不是JSON文档,它是HTML,如您打印它可以看到。所以,我建议用这种方式下载文件:
require 'net/http'
require 'json'
url = URI.parse('http://api.4chan.org/3/catalog.json')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
并解析它:
puts JSON.parse(res.body)