Skip to main content

asyncjson

Asynchronous json library with support of nested awaitable objects in data.

The most important features are supporting async functions and async generators on any level of data structure, even for dict keys.

Now the library contains async version of json.dumps function. This library was made to help stream the heavy json structures without blocking the event loop.

Be aware, this is alpha version of library.

Installing

pip install asyncjson

Example

import sys
import asyncio
import random
import string
import asyncjson

async def random_number():
    await asyncio.sleep(random.random())
    return random.randrange(0, 100)

async def random_strings():
    for i in range(random.randint(0, 10)):
        await asyncio.sleep(random.random())
        yield ''.join(random.choice(string.ascii_letters) for _ in range(random.randint(1, 10)))

async def run():
    obj = {
        'dictkey': {
            'list': [1, '2', 3.0],
            'random strings': random_strings(),
            'random number': random_number(),
            random_strings(): "joined random strings in key",
            random_number(): "random number in key"
        },
        'another random number': random_number(),
        'awaitable objects in list': ["sample", random_number(), random_strings(), [], {}],
        'intkey': 123,
        'stringkey': "qwer",
    }
    async for i in await asyncjson.dumpgen(obj):
        sys.stdout.write(i)
        sys.stdout.flush()

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

Will give the result which will appear piece by piece because of sleeps added for demonstration purposes:

{
 "dictkey": {
  "list": [
   1, 
   "2", 
   3.0
  ], 
  "random strings": [
   "IuaNSw"
  ], 
  "random number": 65, 
  "ZuuBZyEMYTtqyOzYoILOZXCgnTYYsu": "joined random strings in key", 
  43: "random number in key"
 }, 
 "another random number": 85, 
 "awaitable objects in list": [
  "sample", 
  16, 
  [
   "wQ", 
   "Jp", 
   "xDfTNZCUv"
  ], 
  [], 
  {}
 ], 
 "intkey": 123, 
 "stringkey": "qwer"
}

To be done

  • Implement async versions of dump, loads, load functions
  • Implement async encoder/decoder on C in order to increase performance

Metadata

Release files for asyncjson 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for asyncjson 0.0.1
File Size Uploaded
asyncjson-0.0.1.tar.gz 12.4 kB Details

Release files / asyncjson-0.0.1.tar.gz

Download URL asyncjson-0.0.1.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
097772d34d0c43e6f30733a8e1491df9b664b45b59b7909e9d92bbe7170f2cff
BLAKE2b-256 checksum
How to use checksums
bb378663188da195edde799ef05fe0ab9b00b7d2be03ec20530b74fb8d717e08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.10

Release history Release notifications | RSS feed

This release

0.0.1 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page