在Ilya Grigorik提供的http://www.githubarchive.org/中,我发现在许多gz文件中,一些连续事件被记录到同一个文件中。
例如在2011-03-15-21.json.gz
要做到以上几点: wget http://data.githubarchive.org/2011-03-15-21.json.gz
在这个gz例如,如果你搜索id 1484832,你会发现2个连续事件(jsons)在同一行 看到 http://codebeautify.org/jsonviewer/2cb891
同一行中的两个jsons是
的组合http://codebeautify.org/jsonviewer/c7e18e
和
http://codebeautify.org/jsonviewer/945d56
有什么影响? 当我加载每一行并加载python时(为什么python?因为我觉得python在处理jsons时很舒服)json.loads它说它无效,因为它是两个jsons的组合。
问题:
1)当你处理github存档数据时,你是如何解决这些错误的?
2)我已经拥有本地数据。那我怎么能克服这个问题呢。我应该编写特定于此案例的代码来克服吗? 我写的代码就像
jsonlist = line.split('}{')
json.loads(jsonlist[0] + '}', "ISO-8859-1") # load and navigate through this json
json.loads('{' + jsonlist[1], "ISO-8859-1") # load and navigate through this json
答案 0 :(得分:0)
我在这里得到了解决方案
1)当你处理github存档数据时,你是如何解决这些错误的? https://github.com/vadasg/githubarchive-parser/blob/master/src/FixGitHubArchiveDelimiters.rb
。此脚本可以消除同一行中出现的两个或多个事件的问题。 所以现在运行这个脚本后,jsons出现在不同的行中。
2)我已经拥有本地数据。那我怎么能克服这个问题呢。我应该编写特定于此案例的代码来克服吗?我写的代码就像 这个脚本消除了编写我上面提到的代码的必要性。
注意:
github中的github archive project
中发现的相关问题警告:
当我运行此脚本时,我收到了与使用的编码相关的错误。因为默认情况下Yajl::Parser.parse(jsonInputFile)
行检查它解析的字符是否遵循UTF-8编码,否则会抛出错误。
由于github数据也包含非UTF-8字符,因此我们也会抛出此错误。所以为了绕过这个问题(或者可能是一个修复),我把它作为
Yajl::Parser.parse(jsonInputFile, :check_utf8 => false)
怀疑参考文档:http://rdoc.info/github/brianmario/yajl-ruby/Yajl/Parser.parse