0

我正在解析的 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 文件中解析,则没有问题。

有谁知道我做错了什么?

4

2 回答 2

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
于 2013-01-29T21:16:44.567 回答
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)
于 2013-01-29T21:17:56.433 回答