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.

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 non-ASCII case (twitter.json):

ASCII case I (apache.json):

ASCII 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.

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.

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.9.tar.gz (390.6 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.9-cp314-cp314-win_amd64.whl (717.2 kB view details)

Uploaded CPython 3.14Windows x86-64

ssrjson-0.0.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (720.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

ssrjson-0.0.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (238.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

ssrjson-0.0.9-cp314-cp314-macosx_11_0_universal2.whl (233.4 kB view details)

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

ssrjson-0.0.9-cp313-cp313-win_amd64.whl (701.3 kB view details)

Uploaded CPython 3.13Windows x86-64

ssrjson-0.0.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (720.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

ssrjson-0.0.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (238.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

ssrjson-0.0.9-cp313-cp313-macosx_11_0_universal2.whl (233.2 kB view details)

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

ssrjson-0.0.9-cp312-cp312-win_amd64.whl (701.2 kB view details)

Uploaded CPython 3.12Windows x86-64

ssrjson-0.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (720.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

ssrjson-0.0.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (238.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

ssrjson-0.0.9-cp312-cp312-macosx_11_0_universal2.whl (232.6 kB view details)

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

ssrjson-0.0.9-cp311-cp311-win_amd64.whl (698.9 kB view details)

Uploaded CPython 3.11Windows x86-64

ssrjson-0.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (711.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

ssrjson-0.0.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (236.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

ssrjson-0.0.9-cp311-cp311-macosx_11_0_universal2.whl (232.3 kB view details)

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

ssrjson-0.0.9-cp310-cp310-win_amd64.whl (698.9 kB view details)

Uploaded CPython 3.10Windows x86-64

ssrjson-0.0.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (711.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

ssrjson-0.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (236.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

ssrjson-0.0.9-cp310-cp310-macosx_11_0_universal2.whl (232.3 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for ssrjson-0.0.9.tar.gz
Algorithm Hash digest
SHA256 0a038679e24a579c77ae194d45e1c45610391ba6c27204c95fd0272fadbf9c92
MD5 35bd0f2f523b636b6ca7fc822abf6ba1
BLAKE2b-256 3aa60f0f546217ca1bd6021d9d2d9dbaa7153eb756e63138548b3239e5b7f8cd

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ssrjson-0.0.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 40d99806db8f96b7a41908a055ee917a211658c0917ada49a8592d5ad324e15a
MD5 18284551158ff13a2875e6b21519d513
BLAKE2b-256 f23f6847d1021f023092ae1537e9e9d4adea071d6dcd30895df926d8c8b88e39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 588fdee93b5f6e7b1e37e92ac6ad7d823f284281c6a50b621ec506fc25702c37
MD5 43a9bb8e411e55c95317a25b5814c38a
BLAKE2b-256 ac3ad59625d272d36daf517fb55c04f3cac5bb50162cd8fa39bf731d1858250c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 5b19250160bd9d67e3971df496a3fe0947ab78a71544d32fcb616f0d1dbc5378
MD5 a35034198ee51543dd6058d99b576b2a
BLAKE2b-256 7bf181e7e2fc577e12ee1059a160530fa6e69009bdf04aaf91dcc6027c9aaedb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 8541a8e47caf015de608cc58d5e10407550f67caaaed9f3a90d06d3a039552af
MD5 8ef32dc9d0ce9356d486d8fe974fb6ee
BLAKE2b-256 7e1a9bcecf195e8967c6b602f97a88202c077569f2404861106f31718578a498

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ssrjson-0.0.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4971e989da3113a281824baed8cdfe98c54583f0e992b95462de5580080c4241
MD5 ff007afcffaeadaebb8c520ec7e296d8
BLAKE2b-256 df21259a6fab68c44e81df6d3c2df3843104dd4ecf90cf7ad5e60932b9d96dce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 f481ef798a76b804e4476efd74e860e068270404d151809ea6d81df33089b2c0
MD5 d8027d1ab3bcfe51b65e343badd3a1bb
BLAKE2b-256 edc7f4cd947fa5f002c3295eef24504fef8e3a081c0d89f6cf0ce6250f7cbcd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 9ea07e5163e724abc40dc8f02a7e807f53f99867bb554b6fdefc82eb6bf49acd
MD5 b6b17b7c114dc395b6039ff5c383b445
BLAKE2b-256 bdad1ddcea6425511caaa6eeb89a01c62c04b6c45217230c650a2749c74a18a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 2dcfd4f7bbd8dca1c46e00ce35955431aac85018cb959c37c1870f38dda8e463
MD5 64a3f8216bc4e61a5a76f2024e5ce0b5
BLAKE2b-256 950deddc037cdf62b1ab9dc65f258f9c65afa1390d02141f2244e1d5f4f78e85

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ssrjson-0.0.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7b9832ac566c9b36777ee5d40aeedb7216f71c9fc12814057626045d815a5ef8
MD5 ae1decd3af3aad8eecb16f4e8eefaf69
BLAKE2b-256 eae270473b49382b4f78d651b74a40f281a35ca543dfe1ee39c8092ff75b9c8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f30644302e302a3f875a068d095ae36c0223c15364b8e9bd5e748a5f0d380c1c
MD5 c51e63258f71b5b5e5f66a4a685e843f
BLAKE2b-256 2c91c05f03f85f2ec428684a478f47c813aec6ceb26b26d2f4b050641f25b3c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3d6bdec20dfc18277ddf5b9b921997813e575adc9fc7443aec6803f81ba7af6e
MD5 70dabba10a76564ce8922b7ceebdb3f9
BLAKE2b-256 50a4990eea257b85fc0dfd724c87a170d6834dfd2e3ebf42ece61a4cd4d67f59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 a794ec403248015283964ab593e3445f05d48ea9fb8b512685f183ac3ecf70b7
MD5 6a02d8426abbf6133dc01233e78886c5
BLAKE2b-256 f286fd5e8d52f1892d8dc0fa4592e217aea8dc404e553fcd03ee8371433e7032

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ssrjson-0.0.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 741857d2ed0277923c6b4626609a9217a945f4d998743c1087728e0c03fbfbcf
MD5 d8b6e07b654e0f42d7c68e2a227d95bb
BLAKE2b-256 c0d9a0426b6e0801b61cc01c5ef4418eb0fc57800f9c612506d59afdbd3cb207

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 925306e049532d50365c3325421232f900150b671d194fe66dc8da2ae6e686f6
MD5 831e60441e16eb6b0d0f4da5b3daaeab
BLAKE2b-256 1463c74a575632e65fbf88e5152617fc24a2ce05b2cde689595dcd994851e591

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c29e7031e354cce5ef67479a98055f17a0ae56c42935c1032008b7fafa8b35d6
MD5 961cf36aa14de672e844aa5c0a766eaf
BLAKE2b-256 4c079796df2e1133c4aed115ffa97bbfae34d82e9f3b8a6e6834f71ff93229e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 34ca62b13918ebe28f67e2bd60a737d1c7a1ea3b27d562d670c3268202acb8b4
MD5 27f98fa86f7d56127c8480ddc0de9573
BLAKE2b-256 2b76595bfcfc3d1f6739efc26b16a43583462977c4fc4706c4bbf2291b7ddba3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ssrjson-0.0.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b996dcfad2f6d76a3e4f54735b6dbb66729c9118410e833da5bfa31a29a059a6
MD5 98679cc1b66fce72a0d59abe00927069
BLAKE2b-256 8ef13f8cbe78eaacfc3b87409fd90dbae22fe4b047670ebd8c7ac7f13c4ff070

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 73ab0444dd95ac20b13389e8f0f4a2ac87b4c728a489378185778017d5d0dc63
MD5 036924d4992360c160d0d6d5a175a91d
BLAKE2b-256 1c7bfc7f8c2a7763dd3f078d72e422955b1918261bffe6b8bfdee70da6711fbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e7ec91bab200216b28a89e702de7a227d4c2b2d1eb0a78c16dbd8c2f87198b49
MD5 ab349b0edb16bb2182cdde898cefc65b
BLAKE2b-256 7c2ab177b4677d675d9dd9fe2891325b2dc1d60ae1fc9619822f4fc2551f859a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ssrjson-0.0.9-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 c66776d85b3b560841cadd8e57ebd99d2946893326e8d423ee21308767c6f2b7
MD5 6ac1fc92a486489387cf00dbf091e51c
BLAKE2b-256 28d27b969d0191b491a597701870f1982223a692cdbc39f26f2bdf29890b556c

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