Skip to main content

Iterative JSON parser with a standard Python iterator interface

Project description

https://travis-ci.com/ICRAR/ijson.svg?branch=master https://ci.appveyor.com/api/projects/status/32wiho6ojw3eakp8/branch/master?svg=true https://coveralls.io/repos/github/ICRAR/ijson/badge.svg?branch=master https://badge.fury.io/py/ijson.svg https://img.shields.io/pypi/pyversions/ijson.svg https://img.shields.io/pypi/dd/ijson.svg https://img.shields.io/pypi/dw/ijson.svg https://img.shields.io/pypi/dm/ijson.svg

ijson

Ijson is an iterative JSON parser with standard Python iterator interfaces.

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": { ... }},
      // ...
    ]
  }
}

High-level interfaces

Most common usage is having ijson yield native Python objects out of a JSON stream located under a prefix. This is done using the items function. 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)

For how to build a prefix see the prefix section below.

Other times it might be useful to iterate over object members rather than objects themselves (e.g., when objects are too big). In that case one can use the kvitems function instead:

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)

Lower-level interfaces

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. This is achieved using the parse function:

import ijson

parser = ijson.parse(urlopen('http://.../'))
stream.write('<geo>')
for prefix, event, value in parser:
    if (prefix, event) == ('earth', 'map_key'):
        stream.write('<%s>' % value)
        continent = value
    elif prefix.endswith('.name'):
        stream.write('<object name="%s"/>' % value)
    elif (prefix, event) == ('earth.%s' % continent, 'end_map'):
        stream.write('</%s>' % continent)
stream.write('</geo>')

Even more bare-bones is the ability to react on individual events without even calculating a prefix using the basic_parse function:

import ijson

events = ijson.basic_parse(urlopen('http://.../'))
num_names = sum(1 for event, value in events
                if event == 'map_key' and value == 'name')

asyncio support

In python 3.5+ all of the methods above have an *_async counterpart that works on file-like asynchronous objects, and that can be iterated asynchronously. In other words, something like this:

import asyncio
import ijson

async def run():
   f = await async_urlopen('http://..../')
   async for object in ijson.items_async(f, 'earth.europe.item'):
      if object['type'] == 'city':
         do_something_with(city)
asyncio.run(run())

Push interfaces

All examples above use a file-like object as the data input (both the normal case, and for asyncio support), and hence are “pull” interfaces, with the library reading data as necessary. If for whatever reason it’s not possible to use such method, you can still push data through yet a different interface: coroutines (via generators, not asyncio coroutines). Coroutines effectively allow users to send data to them at any point in time, with a final target coroutine-like object receiving the results.

In the following example the user is doing the reading instead of letting the library do it:

import ijson

@ijson.coroutine
def print_cities():
   while True:
      obj = (yield)
      if obj['type'] != 'city':
         continue
      print(obj)

coro = ijson.items_coro(print_cities(), 'earth.europe.item')
f = urlopen('http://.../')
for chunk in iter(functools.partial(f.read, buf_size)):
   coro.send(chunk)
coro.close()

All four ijson iterators have a *_coro counterpart that work by pushing data into them. Instead of receiving a file-like object and option buffer size as arguments, they receive a single target argument, which should be a coroutine-like object (anything implementing a send method) through which results will be published.

An alternative to providing a coroutine is to use ijson.sendable_list to accumulate results, providing the list is cleared after each parsing iteration, like this:

import ijson

events = ijson.sendable_list()
coro = ijson.items_coro(events, 'earth.europe.item')
f = urlopen('http://.../')
for chunk in iter(functools.partial(f.read, buf_size)):
   coro.send(chunk)
   process_accumulated_events(events)
   del events[:]
coro.close()
process_accumulated_events(events)

Options

Additional options are supported by all ijson functions to give users more fine-grained control over certain operations:

  • The multiple_values option (defaults to False) controls whether multiple top-level values are supported. JSON content should contain a single top-level value (see the JSON Grammar). However there are plenty of JSON files out in the wild that contain multiple top-level values, often separated by newlines. By default ijson will fail to process these with a parse error: trailing garbage error unless multiple_values=True is specified.

  • Similarly the allow_comments option (defaults to False) controls whether C-style comments (e.g., /* a comment */), which are not supported by the JSON standard, are allowed in the content or not.

  • For functions taking a file-like object, an additional buf_size option (defaults to 65536 or 64KB) specifies the amount of bytes the library should attempt to read each time.

  • The items and kvitems functions, and all their variants, have an optional map_type argument (defaults to dict) used to construct objects from the JSON stream. This should be a dict-like type supporting item assignment.

Events

When using the lower-level ijson.parse function, three-element tuples are generated containing a prefix, an event name, and a value. Events will be one of the following:

  • start_map and end_map indicate the beginning and end of a JSON object, respectively. They carry a None as their value.

  • start_array and end_array indicate the beginning and end of a JSON array, respectively. They also carry a None as their value.

  • map_key indicates the name of a field in a JSON object. Its associated value is the name itself.

  • null, boolean, integer, double, number and string all indicate actual content, which is stored in the associated value.

Prefix

A prefix represents the context within a JSON document where an event originates at. It works as follows:

  • It starts as an empty string.

  • A <name> part is appended when the parser starts parsing the contents of a JSON object member called name, and removed once the content finishes.

  • A literal item part is appended when the parser is parsing elements of a JSON array, and removed when the array ends.

  • Parts are separated by ..

When using the ijson.items function, the prefix works as the selection for which objects should be automatically built and returned by ijson.

Backends

Ijson provides several implementations of the actual parsing in the form of backends located in ijson/backends:

  • yajl2_c: a C extension using YAJL 2.x. This is the fastest, but might require a compiler and the YAJL development files to be present when installing this package. Binary wheel distributions exist for major platforms/architectures to spare users from having to compile the package.

  • yajl2_cffi: wrapper around YAJL 2.x using CFFI.

  • yajl2: wrapper around YAJL 2.x using ctypes, for when you can’t use CFFI for some reason.

  • yajl: deprecated YAJL 1.x + ctypes wrapper, for even older systems.

  • python: pure Python parser, good to use with PyPy

You can import a specific backend and use it in the same way as the top level library:

import ijson.backends.yajl2_cffi as ijson

for item in ijson.items(...):
    # ...

Importing the top level library as import ijson uses the first available backend in the same order of the list above. Its name is recorded under ijson.backend.

FAQ

  1. Q: Does ijson work with bytes or str objects?

    A: In short: both are accepted as input, outputs are only str.

    All ijson functions expecting a file-like object should ideally be given one that is opened in binary mode (i.e., its read function returns bytes objects, not str). However if a text-mode file object is given then the library will automatically encode the strings into UTF-8 bytes. A warning is currently issued (but not visible by default) alerting users about this automatic conversion.

    On the other hand ijson always returns text data (JSON string values, object member names, event names, etc) as str objects in python 3, and unicode objects in python 2.7. This mimics the behavior of the system json module.

  2. Q: How are numbers dealt with?

    A: ijson returns int values for integers and decimal.Decimal values for floating-point numbers. This is mostly because of historical reasons. In the future an option might be added to use a different type (e.g., float).

  3. Q: I’m getting an UnicodeDecodeError, or an IncompleteJSONError with no message

    A: This error is caused by byte sequences that are not valid in UTF-8. In other words, the data given to ijson is not really UTF-8 encoded, or at least not properly.

    Depending on where the data comes from you have different options:

    • If you have control over the source of the data, fix it.

    • If you have a way to intercept the data flow, do so and pass it through a “byte corrector”. For instance, if you have a shell pipeline feeding data through stdin into your process you can add something like ... | iconv -f utf8 -t utf8 -c | ... in between to correct invalid byte sequences.

    • If you are working purely in python, you can create a UTF-8 decoder using codecs’ incrementaldecoder to leniently decode your bytes into strings, and feed those strings (using a file-like class) into ijson (see our string_reader_async internal class for some inspiration).

    In the future ijson might offer something out of the box to deal with invalid UTF-8 byte sequences.

  4. Q: I’m getting parse error: trailing garbage or Additional data found errors

    A: This error signals that the input contains more data than the top-level JSON value it’s meant to contain. This is usually caused by JSON data sources containing multiple values, and is usually solved by passing the multiple_values=True to the ijson function in use. See the options section for details.

  5. Are there any differences between the backends?

    Apart from their performance, all backends are designed to support the same capabilities. There are however some small known differences:

    • The yajl backend doesn’t support multiple_values=True. It also doesn’t complain about additional data found after the end of the top-level JSON object.

    • The python backend doesn’t support allow_comments=True It also internally works with str objects, not bytes, but this is an internal detail that users shouldn’t need to worry about, and might change in the future.

Acknowledgements

ijson was originally developed and actively maintained until 2016 by Ivan Sagalaev. In 2019 he handed over the maintenance of the project and the PyPI ownership.

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ijson-3.0.4.tar.gz (48.2 kB view details)

Uploaded Source

Built Distributions

ijson-3.0.4-cp38-cp38-win_amd64.whl (46.0 kB view details)

Uploaded CPython 3.8Windows x86-64

ijson-3.0.4-cp38-cp38-win32.whl (43.5 kB view details)

Uploaded CPython 3.8Windows x86

ijson-3.0.4-cp38-cp38-manylinux1_x86_64.whl (104.5 kB view details)

Uploaded CPython 3.8

ijson-3.0.4-cp37-cp37m-win_amd64.whl (45.6 kB view details)

Uploaded CPython 3.7mWindows x86-64

ijson-3.0.4-cp37-cp37m-win32.whl (43.1 kB view details)

Uploaded CPython 3.7mWindows x86

ijson-3.0.4-cp37-cp37m-manylinux1_x86_64.whl (98.8 kB view details)

Uploaded CPython 3.7m

ijson-3.0.4-cp37-cp37m-macosx_10_6_x86_64.whl (50.8 kB view details)

Uploaded CPython 3.7mmacOS 10.6+ x86-64

ijson-3.0.4-cp36-cp36m-win_amd64.whl (45.6 kB view details)

Uploaded CPython 3.6mWindows x86-64

ijson-3.0.4-cp36-cp36m-win32.whl (43.1 kB view details)

Uploaded CPython 3.6mWindows x86

ijson-3.0.4-cp36-cp36m-manylinux1_x86_64.whl (98.7 kB view details)

Uploaded CPython 3.6m

ijson-3.0.4-cp36-cp36m-macosx_10_6_x86_64.whl (50.8 kB view details)

Uploaded CPython 3.6mmacOS 10.6+ x86-64

ijson-3.0.4-cp35-cp35m-win_amd64.whl (45.6 kB view details)

Uploaded CPython 3.5mWindows x86-64

ijson-3.0.4-cp35-cp35m-win32.whl (43.1 kB view details)

Uploaded CPython 3.5mWindows x86

ijson-3.0.4-cp35-cp35m-manylinux1_x86_64.whl (98.7 kB view details)

Uploaded CPython 3.5m

ijson-3.0.4-cp35-cp35m-macosx_10_6_x86_64.whl (50.8 kB view details)

Uploaded CPython 3.5mmacOS 10.6+ x86-64

ijson-3.0.4-cp34-cp34m-macosx_10_6_x86_64.whl (48.3 kB view details)

Uploaded CPython 3.4mmacOS 10.6+ x86-64

ijson-3.0.4-cp27-cp27mu-manylinux1_x86_64.whl (88.8 kB view details)

Uploaded CPython 2.7mu

ijson-3.0.4-cp27-cp27m-manylinux1_x86_64.whl (88.8 kB view details)

Uploaded CPython 2.7m

ijson-3.0.4-cp27-cp27m-macosx_10_6_x86_64.whl (48.2 kB view details)

Uploaded CPython 2.7mmacOS 10.6+ x86-64

File details

Details for the file ijson-3.0.4.tar.gz.

File metadata

  • Download URL: ijson-3.0.4.tar.gz
  • Upload date:
  • Size: 48.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4.tar.gz
Algorithm Hash digest
SHA256 6e25448318cda55e82a5de52beb6813b003cb8e4a7b5753305912a30055a29f8
MD5 7f38caeaaf12530d72810e6cc23f519e
BLAKE2b-256 e6014a6db3ce55a6c136e1f7f14848f7e77c6dfb9323701cc28499401a96e7b2

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 46.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 9bb773fc34a4c6b60d31329063f9bf870e238bbe619c6b9805bfb4ba5f12472e
MD5 0693d9e764a890e01e9bb5588b3e44b7
BLAKE2b-256 6725b751a43b1f9314819203e0ff5adedbd2818a48b1fb3aa81f8dc287d89092

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp38-cp38-win32.whl.

File metadata

  • Download URL: ijson-3.0.4-cp38-cp38-win32.whl
  • Upload date:
  • Size: 43.5 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 7cdd8de953e2782fdedccc01e3b22cd1bc1c3e92cf253c27daf7c65e62fd0a53
MD5 b3ff0aa8f27b330d335437f63c6db3f2
BLAKE2b-256 84489bad99d369417a0fc5e9ed37c8e4f28b6b3e7cb4705cbb5996deb5cec141

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 104.5 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 40dc2826a340737de2927a6523ce722fff187811c06b744cf69e09de9a0aa79e
MD5 3e7bcb875e0ee694200317d3185d56ba
BLAKE2b-256 267b987a0d405abf46a8674bc2ed768c3ad4a580058284524faff9cafd4a30df

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 2589c757fec65b07a459af630059766149cdde3ff1c3a171a726a7b5842fbcf5
MD5 81c3249491da2f43d8100bdfeb0098ea
BLAKE2b-256 8a80ed24452f23739258254df75e09acf7bdfd2833d553b552d8ecbd963860e9

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp37-cp37m-win32.whl.

File metadata

  • Download URL: ijson-3.0.4-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 43.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 4fb8dd9b12f6996442a69012375886e7393d57c0c0b6185bf191d6e6d4d9394d
MD5 16c28ada92a6214f60754fefc34f6b9d
BLAKE2b-256 49920e773ecbccadd258518bb42953e55e2f588045c885e1db317c9717c0bb99

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 98.8 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 29b44c7ae1a7a3dc27d835e6bf23c6c07350eacd7b13b54ace16fe6d167ff684
MD5 0cd070b41f8b20ff0d2fbc6e430212e5
BLAKE2b-256 bf59191fb789c6dcf93cc50fa476cc27a7f3de37e68e4e7769dd90ee43feb2d2

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp37-cp37m-macosx_10_6_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp37-cp37m-macosx_10_6_x86_64.whl
  • Upload date:
  • Size: 50.8 kB
  • Tags: CPython 3.7m, macOS 10.6+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp37-cp37m-macosx_10_6_x86_64.whl
Algorithm Hash digest
SHA256 68ffb77e234eabba3d4c98d8f3c9c14d971cbe6ffc5a703f252dbf73163d857e
MD5 0f0ef38d39d930cc154b2c3802387e59
BLAKE2b-256 c2562004b092512b1392b8849556b7fe3ae089d552523a189ad5635ca60353a7

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 c9bf76a3d54280bb0a2c45d475dc822ab35f265824f336977843f0b2e5e4de39
MD5 09f131d486f5340c70b8fede9a1e88a2
BLAKE2b-256 dfbb71d63974036ae6d5e8300ef5398dc5731dac339a1d09ca5d28bdb4560bd2

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp36-cp36m-win32.whl.

File metadata

  • Download URL: ijson-3.0.4-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 43.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 3925cff93a904423d4284855990dd386aa524304d4cb8ec7b3afc78e34de1ec6
MD5 6155802dd3c593a044092f7b194f2733
BLAKE2b-256 9b024e648f700c801bf0529b5cb67b30ed992fab15b3e0438844d4d7ed2d85d7

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 98.7 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4113be2f0332d15a13fb8599655218678eace0bebd736a8ba3ef8856ce0e74c6
MD5 5a9aa87a90948ecb50d8fb47166802c1
BLAKE2b-256 118203c325c85196744658c6d095c1e90dbd408595c596fc136b2157b2edaa10

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp36-cp36m-macosx_10_6_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp36-cp36m-macosx_10_6_x86_64.whl
  • Upload date:
  • Size: 50.8 kB
  • Tags: CPython 3.6m, macOS 10.6+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp36-cp36m-macosx_10_6_x86_64.whl
Algorithm Hash digest
SHA256 0d7fd00900493497e58b7873a53ff6f27a7070875f285d4e7d80a5c62d745f80
MD5 2e23dbb8aa9717f5750bfdb9a31b2542
BLAKE2b-256 0ddbfc145eabe474566e707bbba422d14fa4c6279f6270b4beb63a6a9827e1b5

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 ee8544d2ca4f39ae6f920be72022bb7f3928639bc4767bd0299a44b2005df3fe
MD5 4c335a830b1f951a37c37d44f949ab46
BLAKE2b-256 855b543f59932726a1cb6485188ce18dfa789166c88bad65526a1503a48b58a7

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp35-cp35m-win32.whl.

File metadata

  • Download URL: ijson-3.0.4-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 43.1 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 9cf47e65eec4ce5b94c5c71888c3356537394b17e24d9c9b47e3a5eef124c41e
MD5 6794ad9b8d717eaad2070278cd92a8e5
BLAKE2b-256 26c1bc888a73dfad71729e41e2f17b2db23fad708d113ad1188aef39d08da425

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 98.7 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8389eddab9abc19145995d9d485bfc5cba8fd6b18b14b36106e0ac7ae689d345
MD5 0002270602652f6dbed67a602eec4ca7
BLAKE2b-256 a8ce8355b93220b8ee081f44349c38f6aef5df9f14de3fa3f3461491e8c1ff72

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp35-cp35m-macosx_10_6_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp35-cp35m-macosx_10_6_x86_64.whl
  • Upload date:
  • Size: 50.8 kB
  • Tags: CPython 3.5m, macOS 10.6+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp35-cp35m-macosx_10_6_x86_64.whl
Algorithm Hash digest
SHA256 176c6638351cad63d4cd803237185e9e79656527498f527e1adcff839540c08f
MD5 37e929f707b46eed941d403065ca6faa
BLAKE2b-256 6ebb4d34836eacec9880c23d308ac1d5bece214e4cae7525d34f25d4c0a3bb19

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp34-cp34m-macosx_10_6_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp34-cp34m-macosx_10_6_x86_64.whl
  • Upload date:
  • Size: 48.3 kB
  • Tags: CPython 3.4m, macOS 10.6+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp34-cp34m-macosx_10_6_x86_64.whl
Algorithm Hash digest
SHA256 d045d2cb728d4553b7eca0c9464888ea181dfa65e16dacf8b369fcd7757bc1fa
MD5 28a61a3b52f020de869ac347255dcb15
BLAKE2b-256 c411a8a91fabc177544523e14ce17e8fb5d50c4772ff93d0a06b07afa216071e

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 88.8 kB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 077151d61e4760e4281ba4f8639f7ed5b3ce93ec0b51e6648485a39b2ed449d8
MD5 9f7a751db371056a59c01ca1209bca81
BLAKE2b-256 5400aa795adfaa3b41bc31c1b3edaf4b788d289cc0f8fde56c751ce32da9fa33

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 88.8 kB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9a1dbfa2887caf50022ee5ee226d9dd347498da63bbf3ed8e655aa4826240977
MD5 0e75d74d8fc3d8bc95d69aca52a6f2a3
BLAKE2b-256 a71b8dd21fa0e03ead2a75966bebcfbfda70863540148c0a031f4f026a43db25

See more details on using hashes here.

File details

Details for the file ijson-3.0.4-cp27-cp27m-macosx_10_6_x86_64.whl.

File metadata

  • Download URL: ijson-3.0.4-cp27-cp27m-macosx_10_6_x86_64.whl
  • Upload date:
  • Size: 48.2 kB
  • Tags: CPython 2.7m, macOS 10.6+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.2

File hashes

Hashes for ijson-3.0.4-cp27-cp27m-macosx_10_6_x86_64.whl
Algorithm Hash digest
SHA256 244606e042bb836d75be6c9d890ca9cf5774ffee6306337c73624b5252e97cc9
MD5 f12e3362ce9cfb1f91bb723763df5b6f
BLAKE2b-256 a28f7b1353d9e7a554042f8f8d253d039032f8e3dbc0ce8d295ca6d2b9943700

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page