ijson
Iterative JSON parser with standard Python iterator interfaces
Decision gist · record as of 2026-08-14
Yes. ijson is actively maintained, production-stable, permissively licensed, has no known vulnerabilities, and solves a real problem—streaming JSON parsing—that the standard library does not address. Install it if you regularly work with large JSON files, APIs, or need memory-efficient incremental parsing. The medium install friction is mitigated by pre-built wheels for all major platforms and Python versions.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.9 or later; file-like object must provide a read(size) method returning bytes or str.
- Medium install friction due to compiled C extensions, but binary wheels are provided for major platforms and Python versions (3.9–3.14) and built automatically via GitHub Actions, reducing build-from-source scenarios.
License · maintenance · safety
BSD-3-Clause AND ISC (permissive) — Dual-licensed under BSD-3-Clause and ISC (both permissive), so commercial and proprietary use is permitted with minimal restrictions.
last release 2026-07-06 (39 days) · last repo commit 2026-08-10 · 1,093 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 53,309,834 downloads/mo, #554 on PyPI
Alternatives
Verify before relying
import ijson
from urllib.request import urlopen
f = urlopen('http://example.com/data.json')
objects = ijson.items(f, 'earth.europe.item')
for obj in objects:
print(obj)- Performance characteristics compared to standard json module for different file sizes and JSON structures
- Whether asyncio support covers all parsing modes (items, kvitems, parse, basic_parse) equally
What it is and what it does
ijson is a JSON parser designed to handle large or streaming JSON documents without loading the entire structure into memory at once. It provides multiple interfaces at different abstraction levels: high-level functions like `items()` and `kvitems()` that yield complete Python objects or key-value pairs from a JSON path, mid-level `parse()` that emits (prefix, event, value) tuples, and low-level `basic_parse()` that emits raw (event, value) pairs. The parser accepts file-like objects (files, HTTP responses, sockets), byte/string inputs, iterators, and asynchronous file objects, making it flexible for both synchronous and async workflows.
It is commonly used when JSON payloads are too large to fit in memory, when you need to react to events as they arrive rather than construct full objects, or when you want to extract specific nested values from deeply nested structures. The package includes command-line tools for visualization and benchmarking, supports event interception for filtering or injection, and offers a push-based coroutine interface as an alternative to pull-based file reading.
Use it for
- Parse multi-gigabyte JSON files or streaming APIs without loading the entire document into memory
- Extract specific nested objects from large JSON structures using path-based queries (e.g., 'earth.europe.item')
- React to JSON events in real-time (e.g., counting occurrences of a key) without constructing intermediate objects
- Asynchronously consume JSON from HTTP responses or async file objects in asyncio applications
- Filter or transform JSON content on-the-fly by intercepting and modifying the event stream
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
ijson is actively maintained, production-stable, permissively licensed, has no known vulnerabilities, and solves a real problem—streaming JSON parsing—that the standard library does not address. Install it if you regularly work with large JSON files, APIs, or need memory-efficient incremental parsing. The medium install friction is mitigated by pre-built wheels for all major platforms and Python versions.
Install
ijson on PyPI
Before you install
Medium install friction due to compiled C extensions, but binary wheels are provided for major platforms and Python versions (3.9–3.14) and built automatically via GitHub Actions, reducing build-from-source scenarios.
Requires Python 3.9 or later; file-like object must provide a read(size) method returning bytes or str.
License in practice
Dual-licensed under BSD-3-Clause and ISC (both permissive), so commercial and proprietary use is permitted with minimal restrictions.
Quickstart
import ijson
from urllib.request import urlopen
f = urlopen('http://example.com/data.json')
objects = ijson.items(f, 'earth.europe.item')
for obj in objects:
print(obj)
Verify before relying
- Performance characteristics compared to standard json module for different file sizes and JSON structures
- Whether asyncio support covers all parsing modes (items, kvitems, parse, basic_parse) equally
Package facts
| License | BSD-3-Clause AND ISC permissive |
| Python support | Supports the current Python release >=3.9 |
| Install friction | Medium. Platform-specific wheel |
| Runtime dependencies | None |
| Maintenance | Actively maintained 39 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 53,309,834 / month, #554 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: 3.9Programming Language :: Python :: Implementation :: CPythonProgramming Language :: Python :: Implementation :: PyPyTopic :: Software Development :: Libraries :: Python Modules |
Evidence: ijson-3.5.1-cp310-cp310-macosx_10_9_universal2.whl; ijson-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl; ijson-3.5.1-cp310-cp310-macosx_11_0_arm64.whl; ijson-3.5.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl; ijson-3.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; ijson-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; ijson-3.5.1-cp310-cp310-musllinux_1_2_aarch64.whl; ijson-3.5.1-cp310-cp310-musllinux_1_2_i686.whl; ijson-3.5.1-cp310-cp310-musllinux_1_2_x86_64.whl; ijson-3.5.1-cp310-cp310-win32.whl; ijson-3.5.1-cp310-cp310-win_amd64.whl; ijson-3.5.1-cp310-cp310-win_arm64.whl; ijson-3.5.1-cp311-cp311-macosx_10_9_universal2.whl; ijson-3.5.1-cp311-cp311-macosx_10_9_x86_64.whl; ijson-3.5.1-cp311-cp311-macosx_11_0_arm64.whl; ijson-3.5.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl; ijson-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; ijson-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; ijson-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl; ijson-3.5.1-cp311-cp311-musllinux_1_2_i686.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “iterative json parser”
- ijsonijson is an iterative JSON parser that reads JSON from file-like…
- iterative-telemetrySends anonymized telemetry data from Iterative tools, collecting…
- ipfnIterative proportional fitting algorithm that adjusts…
Give your agent the search over MCP, or paste the wish link into any chat.
More Python Modules packages
Converts domain names between Unicode and ASCII-compatible encoding (Punycode) according to IDNA 2008 and Unicode Technical Standard 46, with security validation and broader script coverage than the standard library.
Install it if you work with internationalized domain names, need to validate domains, or use HTTP clients that depend on it transitively.
Setuptools is a Python build backend and package management tool that handles building, distributing, and installing Python packages, including support for C/C++ extension modules.
PyYAML parses and emits YAML 1.1 data format, enabling serialization and deserialization of configuration files and Python objects to and from human-readable YAML text.
Pydantic validates Python data structures against type hints, coercing and checking input at runtime to ensure it matches a declared schema.
Provides reusable metadata objects for use with PEP-593 `typing.Annotated` to express common constraints like bounds, collection sizes, and predicates on types.
Install it if you use or build libraries that need to express type constraints in a standardized, inspectable way—or if you want to annotate your own types with…
Provides runtime tools to inspect and introspect Python type annotations, enabling programmatic examination of type hints at execution time.
See also jsonslicer · iterable-io · aioitertools · ndjson · python-rapidjson · jsonata-python · jsonseq · json-stream · orjson · iterators