我正在尝试使用 yajl-py 解析 GitHub 存档文件。我相信该文件的基本格式是 JSON 对象流,因此文件本身不是有效的 JSON,但它包含的对象是有效的。
为了对此进行测试,我安装了 yajl-py
,然后使用他们的示例解析器(来自 https://github.com/pykler/yajl-py/blob/master/examples/yajl_py_example.py)尝试解析文件:
python yajl_py_example.py < 2012-03-12-0.json
其中 2012-03-12-0.json
是已解压的 GitHub 存档文件之一。
从他们在 Ruby 中的引用实现看来,这类事情应该可行。 Python 包不处理 JSON 流吗?
顺便说一句,这是我得到的错误:
yajl.yajl_common.YajlError: parse error: trailing garbage
9478bbc3","type":"PushEvent"}{"repository":{"url":"https://g
(right here) ------^
最佳答案
您需要使用流解析器来读取数据。 Yajl 支持流解析,它允许您一次从文件/流中读取一个对象。话虽如此,Python 似乎并没有针对 Yajl 的有效绑定(bind)。
py-yajl 已将 iterload
注释掉,不知道为什么:https://github.com/rtyler/py-yajl/commit/a618f66005e9798af848c15d9aa35c60331e6687#L1R264
不是 Python 解决方案,但您可以使用 Ruby 绑定(bind)来读取数据并以您需要的格式发出数据:
# gem install yajl-ruby require 'open-uri' require 'zlib' require 'yajl' gz = open('http://data.githubarchive.org/2012-03-11-12.json.gz') js = Zlib::GzipReader.new(gz).read Yajl::Parser.parse(js) do |event| print event end
关于python - Yajl 在 Python 中使用 githubarchive.org JSON 流解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432432/