ijson 介绍 - 处理超大json文件时用这个,不会出现内存溢出问题

本文介绍了 Ijson,它是具有标准 Python 迭代器接口的迭代 JSON 解析器。Ijson 托管在 PyPI 中,可通过 pip 安装,为主要平台和 Python 版本提供二进制轮子。还给出了使用示例,如用 items 函数处理对象,用 kvitems 函数迭代对象成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ijson 是具有标准 Python 迭代器接口的迭代 JSON 解析器。

1 Installation

Ijson 托管在 PyPI 中,因此您应该能够通过 pip 安装它:

pip install ijson

        为主要平台(Linux、MacOS、Windows)和 python 版本(2.7、3.5+)提供了二进制轮子。

2 Usage

        所有使用示例都将使用描述地理对象的 JSON 文档:

{
  "earth": {
    "europe": [
      {"name": "Paris", "type": "city", "info": { ... }},
      {"name": "Thames", "type": "river", "info": { ... }},
      // ...
    ],
    "america": [
      {"name": "Texas", "type": "state", "info": { ... }},
      // ...
    ]
  }
}

最常见的用法是让 ijson 从位于前缀下的 JSON 流中生成原生 Python 对象。

这是使用 items 函数完成的。以下是处理所有欧洲城市(city)的方法:

import ijson

f = urlopen('http://.../')
objects = ijson.items(f, 'earth.europe.item')
cities = (o for o in objects if o['type'] == 'city')
for city in cities:
    do_something_with(city)

其他时候,迭代 对象成员而不是对象本身可能很有用(例如,当对象太大时)。在这种情况下,可以改用 kvitems 函数

import ijson

f = urlopen('http://.../')
european_places = ijson.kvitems(f, 'earth.europe.item')
names = (v for k, v in european_places if k == 'name')
for name in names:
    do_something_with(name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值