python - Yajl 在 Python 中使用 githubarchive.org JSON 流解析错误

标签 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

其中 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/

相关文章:

ios - 从 JSON 响应创建一个对象,修改值,并在 Swift 中返回它

iphone - 使用 yajl-objc 编码自定义类

python - 类型错误 : file() takes at most 3 arguments (4 given)

python - 随机森林的可解释性

python - 如何在 Python 中获取 PATH 环境变量分隔符?

c# - 将 MS CRM 2011 插件执行上下文序列化为 JSON

c++ - 如何在 QTableView 中设置特定单元格的线条样式?

python - 如何使用 Elasticsearch 和Python有效地索引json文件?

c - 使用 YAJL 在 C 中解析复杂的 JSON 子对象

ruby-on-rails - 使用 YAJL 在 Rails 中拉取流式 API