我试图用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提供有效的绑定。
py yajl已经注释掉了,不知道为什么:https://github.com/rtyler/py-yajl/commit/a618f66005e9798af848c15d9aa35c60331e6687#L1R264
不是python解决方案,但您可以使用ruby绑定读取数据并以所需的格式发送数据:
#gem安装yajl ruby
需要“打开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)do事件|
打印事件
结束