Python ijson解析文件(来自softwaremaniacs.org的ijson)

use*_*366 2 python unix json

我需要一点帮助来解析一个大的JSON文件.这里我只有一个数据样本(只有2个项目).

我需要使用parse方法.open()不起作用,因为文件太大.

parser=ijson.parse("sample.json")
Run Code Online (Sandbox Code Playgroud)

我需要循环并打印出Identifier所有的Assets.

它不会那么难,但我无法得到正确的代码.

感谢您提供任何有用的提示.

彼得

json数据:

{
  "AssetCount": 2,
  "Server": "xy",
  "Assets": [
    {
      "Identifier": "21979c09fc4e6574"
    },
    {
      "Identifier": "e6235cce58ec8b9c"
    }
 ]
}
Run Code Online (Sandbox Code Playgroud)

joe*_*ker 5

试试ijson.parse(open('sample.json')).输出看起来像

list(ijson.parse(open('sample.json')))

[('', u'start_map', None),
 ('', u'map_key', u'Server'),
 (u'Server', u'string', u'xy'),
 ('', u'map_key', u'Assets'),
 (u'Assets', u'start_array', None),
 (u'Assets.item', u'start_map', None),
 (u'Assets.item', u'map_key', u'Identifier'),
 (u'Assets.item.Identifier', u'string', u'21979c09fc4e6574'),
 (u'Assets.item', u'end_map', None),
 (u'Assets.item', u'start_map', None),
 (u'Assets.item', u'map_key', u'Identifier'),
 (u'Assets.item.Identifier', u'string', u'e6235cce58ec8b9c'),
 (u'Assets.item', u'end_map', None),
 (u'Assets', u'end_array', None),
 ('', u'map_key', u'AssetCount'),
 (u'AssetCount', u'number', 2),
 ('', u'end_map', None)]
Run Code Online (Sandbox Code Playgroud)

ijson也可以从pypi获得.


小智 5

可能为时已晚,但无论如何…

ijson.parse是一个较低级别的函数,您想ijson.items改为为您执行所有前缀过滤和对象构造:

import ijson
f = open('sample.json', 'rb')
for id in ijson.items(f, 'Assets.item.Identifier'):
    # do something with id
Run Code Online (Sandbox Code Playgroud)

注意:ijson希望您的文件为二进制格式,因此为中的“ rb”模式open

  • 是否有任何文档可以解释 API 的详细信息?以及它是如何工作的? (2认同)