首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python ijson解析文件(来自softwaremaniacs.org的ijson)

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

Stack Overflow用户
提问于 2013-11-23 00:05:59
回答 3查看 11.8K关注 0票数 2

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

我需要使用parse方法。open()无法工作,因为文件太大。

代码语言:javascript
运行
复制
parser=ijson.parse("sample.json")

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

这不是很难,但是我不能得到正确的代码。

感谢您的任何有用的提示。

彼得

json数据:

代码语言:javascript
运行
复制
{
  "AssetCount": 2,
  "Server": "xy",
  "Assets": [
    {
      "Identifier": "21979c09fc4e6574"
    },
    {
      "Identifier": "e6235cce58ec8b9c"
    }
 ]
}
EN

回答 3

Stack Overflow用户

发布于 2013-11-23 01:12:24

试试ijson.parse(open('sample.json'))。输出将如下所示

代码语言:javascript
运行
复制
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)]

ijson也可以从pypi获得。

票数 7
EN

Stack Overflow用户

发布于 2014-10-12 01:51:01

这可能已经太晚了,但无论如何,…

ijson.parse是一个较低级别的函数,您需要使用ijson.items,它可以为您完成所有的前缀过滤和对象构造:

代码语言:javascript
运行
复制
import ijson
f = open('sample.json', 'rb')
for id in ijson.items(f, 'Assets.item.Identifier'):
    # do something with id

注意: ijson想要二进制格式的文件,因此在open中使用'rb‘模式。

票数 7
EN

Stack Overflow用户

发布于 2014-05-15 20:45:14

最好像这样试一试

代码语言:javascript
运行
复制
import ijson

file_name="sample.json"

with open(file_name) as file:

    parser = ijson.parse(file)

    for prefix, event, value in parser:

        if prefix=="AssetCount":

            print value

        if prefix=="Server":

            print value

        if prefix=="Assets.item.Identifier":

            print value

输出如下:

代码语言:javascript
运行
复制
2

xy

21979c09fc4e6574

e6235cce58ec8b9c
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20149321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档