Skip to main content

A high-performance Python JSON library that fully leverages modern processor capabilities.

Project description

ssrJSON

PyPI - Version PyPI - Wheel Supported Python versions codecov

A SIMD boosted high-performance and correct Python JSON parsing library that fully leverages modern processor capabilities.

Introduction

ssrJSON is a Python JSON library that leverages modern hardware capabilities to achieve peak performance, implemented primarily in C with some components written in C++. It offers a fully compatible interface to Python’s standard json module, making it a seamless drop-in replacement, while providing exceptional performance for JSON encoding and decoding.

If you prefer to skip the technical details below, please proceed directly to the How To Install section.

How Fast is ssrJSON?

TL;DR: ssrJSON is faster than or nearly as fast as orjson (which announces itself as the fastest Python library for JSON) on most benchmark cases.

Below is an artificial benchmark case to demonstrate the speed of encoding non-ASCII JSON (simple_object_zh.json). Upon seeing the diagram below, you might wonder: why do the performance results from other libraries appear so poor? If you are interested, please refer to the section UTF-8 Cache of str Objects.

Real-world case (twitter.json):

Real-world case II (github.json):

Floats (canada.json):

Numbers (mesh.json):

ssrjson.dumps() is about 4x-27x as fast as json.dumps() (Python3.14, x86-64, AVX2). ssrjson.loads() is about 2x-8x as fast as json.loads() for str input and is about 2x-8x as fast as json.loads() for bytes input (Python3.14, x86-64, AVX2). ssrJSON also provides ssrjson.dumps_to_bytes(), which encode Python objects directly to UTF-8 encoded bytes object using SIMD instructions.

Details of benchmarking can be found in the ssrjson-benchmark project. If you wish to run the benchmark tests yourself, you can execute the following commands:

pip install ssrjson-benchmark
python -m ssrjson_benchmark

This will generate a PDF report of the results. If you choose to, you may submit this report to the benchmark repository, allowing others to view the performance metrics of ssrJSON on your device.

SIMD Acceleration

ssrJSON is designed for modern hardware and extensively leverages SIMD instruction sets to accelerate encoding and decoding processes. This includes operations such as memory copying, integer type conversions, JSON encoding, and UTF-8 encoding. Currently, ssrJSON supports x86-64-v2 and above (requiring at least SSE4.2) as well as aarch64 devices. It does not support 32-bit systems or older x86-64 and ARM hardware with limited SIMD capabilities.

On the x86-64 platform, ssrJSON provides three distinct SIMD libraries optimized for SSE4.2, AVX2, and AVX512, respectively, automatically selecting the most appropriate library based on the device’s capabilities. For aarch64 architectures, it utilizes the NEON instruction set. Combined with Clang’s powerful vector extensions and compiler optimizations, ssrJSON can almost fully exploit CPU performance during encoding operations.

UTF-8 Cache of str Objects

Non-ASCII str objects may store a cached representation of their UTF-8 encoding (within the corresponding C structure PyUnicodeObject, represented as a const char * and a length with type Py_ssize_t) to minimize the overhead of subsequent UTF-8 encoding operations. When PyUnicode_AsUTF8AndSize (or other similar functions) is invoked, the CPython implementation utilizes it to store the C string along with its length. This mechanism ensures that the caller does not need to manage the lifetime of the returned C string. The str.encode("utf-8") operation does not write to the cache; however, if the cache is already present, it utilizes the cached data to create the bytes object.

To the best of author's knowledge, existing third-party Python JSON libraries typically utilize certain CPython APIs to indirectly write the UTF-8 cache when performing dumps on non-ASCII str objects when the cache does not exist. This results in benchmark tests appearing more favorable than they actually are, since the same object is repeatedly dumped during performance measurements and the cache written will be utilized. But in reality, UTF-8 encoding is computationally intensive on the CPU and often becomes a major performance bottleneck in the dumping process. Also, writing cache will increase the memory usage. Also it is worth noting that during JSON encoding and decoding in Python, converting between str objects does not involve any UTF-8-related operations. However, some third-party JSON libraries still directly or indirectly invoke UTF-8 encoding APIs, which are resource-intensive. This explains why other third-party libraries exhibit poor performance when performing loads on str inputs, or when their dumps function outputs str types.

ssrjson.dumps_to_bytes addresses this by leveraging SIMD instruction sets for UTF-8 encoding, achieving significantly better performance than conventional encoding algorithms implemented in CPython. Furthermore, ssrJSON grants users explicit control over whether or not to write this cache. It is recommended that users evaluate their projects for repeated encoding of each str object to decide on enabling or disabling this caching mechanism accordingly. (Note that ssrjson.dumps produces a str object; there is nothing related to this topic.)

Also, the ssrjson-benchmark project takes this aspect into account by differentiating test scenarios based on the presence or absence of this cache. The results demonstrate that ssrJSON maintains a substantial performance advantage over other third-party Python JSON libraries regardless of whether the cache exists.

If you decide to enable writing cache, ssrJSON will first ensure the cache. The following dumps_to_bytes calls on the same str object will be faster, but the first time may be slower and memory cost may grow.

Pros:

  • The following calls after the first call to dumps_to_bytes on the same str might be faster.

Cons:

  • The first call to dumps_to_bytes (when visiting a non-ASCII str without cache) might be slower.
  • The memory cost will grow. Each non-ASCII str visited will result in memory usage corresponding to the length of its UTF-8 representation. The memory will be released only when the str object is deallocated.

If you decide to disable it, ssrJSON will not write cache; but if the cache already exists, ssrJSON will still use it.

By default, writing cache is enabled globally. You can use ssrjson.write_utf8_cache to control this behavior globally, or pass is_write_cache to ssrjson.dumps_to_bytes in each call.

Dragonbox

Tests and comparisons reveals that the Dragonbox algorithm significantly outperforms other algorithms in terms of performance. Consequently, the ssrJSON project adopts a floating-point number string conversion approach based on the Dragonbox algorithm. The modified Dragonbox library constitutes the sole C++ code within ssrJSON.

JSON Module compatibility

The design goal of ssrJSON is to provide a straightforward and highly compatible approach to replace the inherently slower Python standard JSON encoding and decoding implementation with a significantly more efficient and high-performance alternative. If your module exclusively utilizes dumps and loads, you can replace the current JSON implementation by importing ssrJSON as import ssrjson as json. To facilitate this, ssrJSON maintains compatibility with the argument formats of json.dumps and json.loads; however, it does not guarantee identical results to the standard JSON module, as many features are either intentionally omitted or not yet supported. For further information, please refer to the section Features.

Other Implementation Details

Overview of Encoding

The encoding performance of JSON libraries is not significantly limited by CPython, resulting in a very high potential maximum. As mentioned above, during string encoding, ssrJSON extensively utilizes SIMD instructions to accelerate copying and conversion operations. The implementation of dumps_to_bytes also tackles challenges related to UTF-8 encoding. ssrJSON includes a comprehensive UTF-8 encoding algorithm optimized for all supported SIMD features as well as Python’s internal string representation format (PyCompactUnicodeObject). When encoding integers, ssrJSON adapts the integer encoding approach from yyjson, a highly optimized C-language JSON parsing library.

Overview of Decoding

The main performance bottleneck in JSON decoding is the speed of creating Python objects. To address this, ssrJSON adopts the short-key caching mechanism from orjson, which greatly reduces the overhead of creating Python string objects. For string handling, when the input is of str type, ssrJSON applies SIMD optimizations similar to those used in encoding, speeding up the decoding process. For bytes inputs, ssrJSON uses a customized version of yyjson’s string decoding algorithm. Beyond string handling, ssrJSON extensively leverages yyjson’s codebase, including its numeric decoding algorithms and core decoding logic.

Limitations

Please note that ssrJSON is currently in its beta development stage, and some common features have yet to be implemented. We welcome your contributions to help build a highly performant Python JSON library.

Once the essential features are completed and the project has undergone public testing to reach a stable phase, ssrJSON will strive to minimize the addition of new features to maintain its stability. There are two main reasons for this approach: first, ssrJSON aims to serve as a high-performance foundational library rather than one overloaded with various elaborate features; second, although leveraging C language brings significant performance advantages, it also introduces considerable potential instability. Drawing from software engineering experience, limiting new features will help reduce the incidence of critical vulnerabilities.

How To Install

Pre-built wheels are available on PyPI, you can install it using pip.

pip install ssrjson

Note: ssrJSON requires at least SSE4.2 on x86-64 (x86-64-v2), or aarch64. 32-bit platforms are not supported. ssrJSON does not work with Python implementations other than CPython. Currently supported CPython versions are 3.10, 3.11, 3.12, 3.13, 3.14, 3.15. For Python >= 3.15, you need to build it from source.

Build From Source

Since ssrJSON utilizes Clang's vector extensions, it requires compilation with Clang and cannot be compiled in GCC or pure MSVC environments. On Windows, clang-cl can be used for this purpose. Build can be easily done by the following commands (make sure CMake, Clang and Python are already installed)

# On Linux:
# export CC=clang
# export CXX=clang++
mkdir build
cmake -S . -B build  # On Windows, configure with `cmake -T ClangCL`
cmake --build build

Usage

Basic

>>> import ssrjson
>>> ssrjson.dumps({"key": "value"})
'{"key":"value"}'
>>> ssrjson.loads('{"key":"value"}')
{'key': 'value'}
>>> ssrjson.dumps_to_bytes({"key": "value"})
b'{"key":"value"}'
>>> ssrjson.loads(b'{"key":"value"}')
{'key': 'value'}

Indent

ssrJSON only supports encoding with indent = 2, 4 or no indent (don't pass indent, or pass indent=None). When indent is used, a space is inserted between each key and value.

>>> import ssrjson
>>> ssrjson.dumps({"a": "b", "c": {"d": True}, "e": [1, 2]})
'{"a":"b","c":{"d":true},"e":[1,2]}'
>>> print(ssrjson.dumps({"a": "b", "c": {"d": True}, "e": [1, 2]}, indent=2))
{
  "a": "b",
  "c": {
    "d": true
  },
  "e": [
    1,
    2
  ]
}
>>> print(ssrjson.dumps({"a": "b", "c": {"d": True}, "e": [1, 2]}, indent=4))
{
    "a": "b",
    "c": {
        "d": true
    },
    "e": [
        1,
        2
    ]
}
>>> ssrjson.dumps({"a": "b", "c": {"d": True}, "e": [1, 2]}, indent=3)
Traceback (most recent call last):
  File "<python-input>", line 1, in <module>
    ssrjson.dumps({"a": "b", "c": {"d": True}, "e": [1, 2]}, indent=3)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: integer indent must be 2 or 4

Other Arguments Supported by Python's json

Arguments like ensure_ascii, parse_float provided by json module can be recognized but ignored by design. To treat passing these arguments as an error, call ssrjson.strict_argparse(True) once and it will take effect globally.

The functionality of object_hook in json.loads will be supported in future.

Inspect Module Features and Settings

Call get_current_features to get current features and settings of ssrJSON.

>>> ssrjson.get_current_features()
{'multi_lib': True, 'write_utf8_cache': True, 'strict_arg_parse': False, 'simd': 'AVX2'}

Features

Generally, ssrjson.dumps behaves like json.dumps with ensure_ascii=False, and ssrjson.loads behaves like json.loads. Below we explain some feature details of ssrJSON, which might be different from json module or other third-party JSON libraries.

Strings

Code points within the range [0xd800, 0xdfff] cannot be represented in UTF-8 encoding, and the standard JSON specification typically prohibits the presence of such characters. However, since Python's str type is not encoded in UTF-8, ssrJSON aims to maintain compatibility with the Python json module's behavior, while other third-party Python JSON libraries may complain about this. In contrast, for the dumps_to_bytes function, which encodes output in UTF-8, the inclusion of these characters in the input is considered invalid.

>>> s = chr(0xd800)
>>> (json.dumps(s, ensure_ascii=False) == '"' + s + '"', json.dumps(s, ensure_ascii=False))
(True, '"\ud800"')
>>> (ssrjson.dumps(s) == '"' + s + '"', ssrjson.dumps(s))
(True, '"\ud800"')
>>> ssrjson.dumps_to_bytes(s)
Traceback (most recent call last):
  File "<python-input>", line 1, in <module>
    ssrjson.dumps_to_bytes(s)
    ~~~~~~~~~~~~~~~~~~~~~~^^^
ssrjson.JSONEncodeError: Cannot encode unicode character in range [0xd800, 0xdfff] to utf-8
>>> json.loads(json.dumps(s, ensure_ascii=False)) == s
True
>>> ssrjson.loads(ssrjson.dumps(s)) == s
True

Integers

ssrjson.dumps can only handle integers that can be expressed by either uint64_t or int64_t in C.

>>> ssrjson.dumps(-(1<<63)-1)
Traceback (most recent call last):
  File "<python-input>", line 1, in <module>
    ssrjson.dumps(-(1<<63)-1)
    ~~~~~~~~~~~~~^^^^^^^^^^^^
ssrjson.JSONEncodeError: convert value to long long failed
>>> ssrjson.dumps(-(1<<63))
'-9223372036854775808'
>>> ssrjson.dumps((1<<64)-1)
'18446744073709551615'
>>> ssrjson.dumps(1<<64)
Traceback (most recent call last):
  File "<python-input>", line 1, in <module>
    ssrjson.dumps(1<<64)
    ~~~~~~~~~~~~~^^^^^^^
ssrjson.JSONEncodeError: convert value to unsigned long long failed

ssrjson.loads treats overflow integers as float objects.

>>> ssrjson.loads('-9223372036854775809')  # -(1<<63)-1
-9.223372036854776e+18
>>> ssrjson.loads('-9223372036854775808')  # -(1<<63)
-9223372036854775808
>>> ssrjson.loads('18446744073709551615')  # (1<<64)-1
18446744073709551615
>>> ssrjson.loads('18446744073709551616')  # 1<<64
1.8446744073709552e+19

Floats

For floating-point encoding, ssrJSON employs a slightly modified version of the Dragonbox algorithm. Dragonbox is a highly efficient algorithm for converting floating-point to strings, typically producing output in scientific notation. ssrJSON has partially adapted this algorithm to enhance readability by outputting a more user-friendly format when no exponent is present.

Encoding and decoding math.inf are supported. ssrjson.dumps outputs the same result as json.dumps. The input of ssrjson.loads should be "infinity" with lower or upper cases (for each character), and cannot be "inf".

>>> json.dumps(math.inf)
'Infinity'
>>> ssrjson.dumps(math.inf)
'Infinity'
>>> ssrjson.loads("[infinity, Infinity, InFiNiTy, INFINITY]")
[inf, inf, inf, inf]

The case of math.nan is similar.

>>> json.dumps(math.nan)
'NaN'
>>> ssrjson.dumps(math.nan)
'NaN'
>>> ssrjson.loads("[nan, Nan, NaN, NAN]")
[nan, nan, nan, nan]

License

This project is licensed under the MIT License. Licenses of other repositories are under licenses directory.

Acknowledgments

We would like to express our gratitude to the outstanding libraries and their authors:

  • CPython
  • yyjson: ssrJSON draws extensively from yyjson’s highly optimized implementations, including the core decoding logic, the decoding of bytes objects, the integer encoding and number decoding routines.
  • orjson: ssrJSON references parts of orjson’s SIMD-based ASCII string encoding and decoding algorithms, as well as the key caching mechanism. Additionally, ssrJSON utilizes orjson’s pytest framework for testing purposes.
  • Dragonbox: ssrJSON employs Dragonbox for high-performance floating-point encoding.
  • xxHash: ssrJSON leverages xxHash to efficiently compute hash values for key caching.

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

ssrjson-0.0.10.tar.gz (397.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ssrjson-0.0.10-cp314-cp314-win_amd64.whl (717.7 kB view details)

Uploaded CPython 3.14Windows x86-64

ssrjson-0.0.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (720.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

ssrjson-0.0.10-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (238.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

ssrjson-0.0.10-cp314-cp314-macosx_11_0_universal2.whl (233.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ universal2 (ARM64, x86-64)

ssrjson-0.0.10-cp313-cp313-win_amd64.whl (701.6 kB view details)

Uploaded CPython 3.13Windows x86-64

ssrjson-0.0.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (720.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

ssrjson-0.0.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (238.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

ssrjson-0.0.10-cp313-cp313-macosx_11_0_universal2.whl (233.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

ssrjson-0.0.10-cp312-cp312-win_amd64.whl (701.6 kB view details)

Uploaded CPython 3.12Windows x86-64

ssrjson-0.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (720.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

ssrjson-0.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (238.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

ssrjson-0.0.10-cp312-cp312-macosx_11_0_universal2.whl (233.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

ssrjson-0.0.10-cp311-cp311-win_amd64.whl (699.2 kB view details)

Uploaded CPython 3.11Windows x86-64

ssrjson-0.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (711.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

ssrjson-0.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (236.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

ssrjson-0.0.10-cp311-cp311-macosx_11_0_universal2.whl (232.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

ssrjson-0.0.10-cp310-cp310-win_amd64.whl (699.2 kB view details)

Uploaded CPython 3.10Windows x86-64

ssrjson-0.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (711.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

ssrjson-0.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (236.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

ssrjson-0.0.10-cp310-cp310-macosx_11_0_universal2.whl (232.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file ssrjson-0.0.10.tar.gz.

File metadata

  • Download URL: ssrjson-0.0.10.tar.gz
  • Upload date:
  • Size: 397.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ssrjson-0.0.10.tar.gz
Algorithm Hash digest
SHA256 1a7de8a20ad93a69097190955e99a01d7eacb56371a8595249e5ca0d5e21aa81
MD5 b0db09c18a145cea427d19019c2c7c74
BLAKE2b-256 d3822348047754e303403a97cacaae62d78b36493d57924019e8304eb103ea48

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: ssrjson-0.0.10-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 717.7 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ssrjson-0.0.10-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 dcb1ae5749b61e44d0cc120d763bcd0e6563cab8ff189c711f57d25c67ee147a
MD5 ebd44b4394fa556d7d0b18f53e378d02
BLAKE2b-256 c5c2d8c59ca054a6b753f42ad0582685d54117e7ee244f039c0a94579bd43941

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 86ff91cf0af9597af1328548c5595d757b68090ed3d75e9aef4eac4c1d3a088a
MD5 d9f2a7aa49892c40266c92b9b344a818
BLAKE2b-256 f081ab1793a5d2a12c2899c7bc17c45ba2ffa575ef9fc78affc9590083e897af

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 a5e997b6fcba73f37a5dc0a67be0c00bc48444b7cbf23da328c5c91714f6ab99
MD5 dda51ddbf0e75bfc0acd6e52006d7b6e
BLAKE2b-256 017d3fa80bbe280d286a467d5a91400c258d2cf49882c57acfcc6b06ae61b31e

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp314-cp314-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 268715d4c216530822ac8be406bc65b57a5e6d51f749ebd1c248b9cece59693d
MD5 500cf47e2928e310c79082d7e4c0b1c3
BLAKE2b-256 31290e626757c89037bcfe7e4e3b43c4aa444d011b8628bbc6f22a2017715e45

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ssrjson-0.0.10-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 701.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ssrjson-0.0.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4bf5cb30eb3af7c6d5408bd53ba8add90ca9df64b43a941e9ea9a7fb54ea1e19
MD5 3c613f726b60228233662da098bca83f
BLAKE2b-256 d94481fb6c8b84661c1859514e558eae92c64b581ea2134503851951a3787f83

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c3e733f6d465b4e95aa7fababa3492b5b51c626000ec0e943ae55bc804d5d59a
MD5 8496718bfdfb9a96f7e7c9de23cd3f0c
BLAKE2b-256 f79a5d37962f6652b8c59d8543092eb5fa0a614d8d33b18107398a567c3db18f

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 d5c363eef8d9cac3bb097279865683cc0299ec9e097f691c26e744f4c7c4ea20
MD5 4f9246789c58072fad445652ee810ef5
BLAKE2b-256 3e6f3b9694c9cb38447d67dff7c032a50133569b2ae7b8fb38c08ceadcc78552

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 1fede29fc731425ce36da9bc1ee92264be7d3e1efc9897c4a5f1f182163de535
MD5 568ae74fcf4c0397311f5307af6b8dc6
BLAKE2b-256 ef377564ab979ff0fb389e776e28e632bfe423ba051d7c58c262ba0cf6c4d3d2

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ssrjson-0.0.10-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 701.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ssrjson-0.0.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6d7a363465146d67485bf3c88ee927d8b5af7b6506f8d6680ecdcaf007e54551
MD5 4dd11fb684552dc57cebfa9ef9250dd9
BLAKE2b-256 5e04c5c0c32ed85e38fd879d68ea6ac1065515e26f4840cb8ed70ceea08564b4

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0585b1f9a330d9e5fddf8be53193358117b61e9de86e296550b6b0ed1c85c355
MD5 60d07b6da0eba5f0ed911e3425d362e6
BLAKE2b-256 c23de3aee9f55880739374844fd86d1618379d061a05e51386788e2ab4fa01a8

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 277c124fcccb7795563f00ef2e25db371ad9f9d383197070898e917ba0bacfae
MD5 d9c078fd1159ad3dcea22c61be428ea7
BLAKE2b-256 1fc0f318981750d19fa631ab399c53456c5c74cb1dc45db9b970178aa3a34d76

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d0d2805e73e127dcf18ed331e97f8e0f53656a36331938612dce5ee09543912b
MD5 69423eeef2dc0c68a09168f3f5c364d2
BLAKE2b-256 2ff1ea43486729731b13f2db27e2c5be862bf0341ec7798eb6819c310c7bc196

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: ssrjson-0.0.10-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 699.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ssrjson-0.0.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d4bbb1a3baeb3e062d87851fd75edf02694fda14c64ace1630f465eb38d89e4c
MD5 a9a2d98c5770f777ef6a62bf5f4612bf
BLAKE2b-256 619b35f7c80128512c2396db61f0a5c3aee18c1be3333591516052f67316142d

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2a382f203445bedeee30da36eed4e4fbb595c3bfa1ea8c55fd41850adb0b304
MD5 43dfb51043f486de3f8a222d2cbcf53e
BLAKE2b-256 bbd0eb18fe8e61c570b34aa35e622f347de3188a6a252f16a91efb3f43192dd6

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc49d59aed9e017bce2422b944478bf569eb07b4fcabaca28580f416d049f9a6
MD5 30fbbfa01e88824aedcbaa2f24b46714
BLAKE2b-256 b3a14c23e9e862b88f4e68d757c0129e484e342e90d3375e5a934d1b9a86f058

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 78421ba4e66b289647ac22a3f14d7032ebfe0d6229d864b01dc1f3e1589c5a64
MD5 db1b546e6af94910edb0a902528af22a
BLAKE2b-256 5e133d294b5cd6088eb05bf9b732a1457ddbc20420b9977ad7936866adec79c6

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: ssrjson-0.0.10-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 699.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ssrjson-0.0.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e2eff09f6ca42535847710d6b90aab6a704f04628efb77b6307d3adf20b7a8c6
MD5 f2834705b1600d96b477e3020d9f0d91
BLAKE2b-256 39f211ffe7de5f6fb565dac2924709f7f4a99e019a4f393f619c7368bc53c4a8

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2067167f77dedf28de4f63ef5920f6e9d5552c30e7537e533e10c1372b5a27e2
MD5 4e4e3c84542a37adabbcf92384219971
BLAKE2b-256 2831251b8c00c9a22868bba73e4111d5b9791eaa67c4d103f71b070f6dfd3654

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 73461eff1550de61e9222fa914868e2c426f9a950f48eb4f708c196640a4615c
MD5 6139cd652e859dbdf4bbd0c08dbd4c03
BLAKE2b-256 479a28d114dc5918526becffe794b0d5bfc9b471a27411afc2222ef61243741d

See more details on using hashes here.

File details

Details for the file ssrjson-0.0.10-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.10-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 bb1c4fdde2a183e0fd0237dd9f636ccca2ebeac0848438def849649024b924c8
MD5 6be487b27fe53afc6a8fe067f15d69f2
BLAKE2b-256 dbb07f7fd18424a6a509cb0c090d0293aa539874326d4aae5d09c82fe7e1f1cd

See more details on using hashes here.

Supported by

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