Metadata-Version: 1.1 Name: ijson Version: 1.1 Summary: Iterative JSON parser with a standard Python iterator interface Home-page: https://github.com/isagalaev/ijson Author: Ivan Sagalaev Author-email: maniac@softwaremaniacs.org License: LICENSE.txt Description: ===== ijson ===== Ijson is an iterative JSON parser with a standard Python iterator interface. Usage ===== All usage example will be using a JSON document describing geographical objects:: { "earth": { "europe": [ {"name": "Paris", "type": "city", "info": { ... }}, {"name": "Thames", "type": "river", "info": { ... }}, // ... ], "america": [ {"name": "Texas", "type": "state", "info": { ... }}, // ... ] } } Most common usage is having ijson yield native Python objects out of a JSON stream located under a prefix. Here's how to process all European cities:: 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) Sometimes when dealing with a particularly large JSON payload it may worth to not even construct individual Python objects and react on individual events immediately producing some result:: import ijson parser = ijson.parse(urlopen('http://.../')) stream.write('') for prefix, event, value in parser: if (prefix, event) == ('earth', 'map_key'): stream.write('<%s>' % value) continent = value elif prefix.endswith('.name'): stream.write('' % value) elif (prefix, event) == ('earth.%s' % continent, 'end_map'): stream.write('' % continent) stream.write('') Backends ======== Ijson provides several implementations of the actual parsing in the form of backends located in ijson/backends: - ``yajl2``: wrapper around `YAJL `_ version 2.x - ``yajl``: wrapper around `YAJL `_ version 1.x - ``python``: pure Python parser (good to use under PyPy) You can import a specific backend and use it in the same way as the top level library:: import ijson.backends.python as ijson for item in ijson.items(...): # ... Importing the top level library as ``import ijson`` tries to import all backends in order, so it either finds an appropriate version of YAJL or falls back to the Python backend if none is found. Acknowledgements ================ Python parser in ijson is relatively simple thanks to `Douglas Crockford `_ who invented a strict, easy to parse syntax. The `YAJL `_ library by `Lloyd Hilaiel `_ is the most popular and efficient way to parse JSON in an iterative fashion. Ijson was inspired by `yajl-py `_ wrapper by `Hatem Nassrat `_. Though ijson borrows almost nothing from the actual yajl-py code it was used as an example of integration with yajl using ctypes. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: License :: OSI Approved :: BSD License Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Software Development :: Libraries :: Python Modules