【问题标题】:Iteratively parsing a JSON file with ijson使用 ijson 迭代解析 JSON 文件
【发布时间】:2019-04-07 03:03:02
【问题描述】:

我想分块解析一个巨大的 json 文件。我想使用它的大块而不加载整个东西。 数据可以在这里找到 http://jmcauley.ucsd.edu/data/amazon/

当我使用 ijson 执行此操作时,我收到 JSONError: Additional data 错误。 有没有办法做到这一点?

我的代码:##产生附加数据错误

import pandas as pd


file = open('Books_5.json',"r") ##Books_5.json is the 5-core small dataset
objects = ijson.items(file, 'meta.data.item')
reviews = (o for o in objects if o['type']=='reviewText')
for review in reviews : print(review)

这确实有效,但速度很慢:

path='Books_5.json'
def parse(path):
  g = open(path, 'rb')
  for l in g:
    yield eval(l)
def getDF(path):
  i = 0
  df = {}
  for d in parse(path):
    df[i] = d
    i += 1
  return pd.DataFrame.from_dict(df, orient='index')

df = getDF(path)
df.info()

result of the code

【问题讨论】:

  • 你好,你的问题有点含糊,伙计。您是在问什么是理论上的最佳实施方式,或者更确切地说是关于编辑您已经制作的工作 sn-p 的指导?
  • 对不起,我想延迟加载不是我的意思。术语错误。
  • >我收到一个json格式不正确的错误你能分享一下你得到的确切错误吗?
  • user10598282: ijson 会迭代 json 解析——与下载无关。您遇到的格式不正确的错误可能是由于尝试解析不完整的 json 格式数据。
  • 这里有一个很好的帮助:stackoverflow.com/questions/51316427/… 我们需要错误来帮助您调试它,还需要您用来获取 JSON 数据的代码 sn-p。

标签: python json bigdata ijson


【解决方案1】:

听起来 JSON 数据中包含多个顶级对象,这是 JSON 标准不支持的。但是,在使用 multiple_values=True 选项时,ijson 仍然支持这一点(例如,ijson.items(file, 'meta.data.item', multiple_values=True)

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 2013-11-28
    • 2016-09-08
    • 2016-03-16
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多