Yajl使用Python中的githubarchive.org JSON流解析错误

Bia*_*cki 5 python json yajl

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

其中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) ------^
Run Code Online (Sandbox Code Playgroud)

igr*_*rik 4

您需要使用流解析器来读取数据。Yajl 支持流解析,它允许您一次从文件/流中读取一个对象。话虽如此,Python 似乎没有 Yajl 的工作绑定。

py-yajl 已iterload注释掉,不知道为什么:https://github.com/rtyler/py-yajl/commit/a618f66005e9798af848c15d9aa35c60331e6687#L1R264

不是 Python 解决方案,但您可以使用 Ruby 绑定来读取数据并以您需要的格式发出它:

# gem 安装 yajl-ruby

需要“open-uri”
需要“zlib”
需要“yajl”

gz = open('http://data.githubarchive.org/2012-03-11-12.json.gz')
js = Zlib::GzipReader.new(gz).read

Yajl::Parser.parse(js) 做|事件|
  打印事件
结尾