Skip to main content

A SIMD boosted high-performance and correct Python JSON parsing library, faster than the fastest.

Project description

ssrJSON

PyPI - Version PyPI - Wheel Supported Python versions codecov

A SIMD boosted high-performance and correct Python JSON parsing library, faster than the fastest.

Introduction

ssrJSON is a Python JSON library that leverages modern hardware capabilities to achieve peak performance, implemented primarily 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-31x 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

The author has a detailed tech blog about this topic: Beware of Performance Pitfalls in Third-Party Python JSON Libraries.

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.

xjb64

ssrJSON employs xjb64 as float-to-string algorithm. Tests and comparisons reveals that the xjb64 algorithm significantly outperforms other algorithms in terms of performance and is more compatible. ssrJSON project adopts a slightly modified version to fit the standard behavior of Python's json module.

Random double on Apple M1:

Random double on AMD R7-7840H:

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.

ssrJSON will strive to minimize the addition of new features that are rarely used 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 that are rarely used will help reduce the incidence of critical vulnerabilities.

How To Install

Install from PyPI

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

Or you like the pip way:

mv pysrc ssrjson  # rename the python source directory to make it installable
pip install .

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'}

NumPy Support

ssrJSON can directly serialize NumPy scalar types and ndarray objects without converting them to Python types first. To avoid introducing NumPy as a hard dependency, you must explicitly enable this by calling setup_numpy_types once:

>>> import numpy as np
>>> import ssrjson
>>> ssrjson.setup_numpy_types(np)

After setup, NumPy scalars and arrays are recognized in dumps and dumps_to_bytes:

>>> ssrjson.dumps(np.int64(42))
'42'
>>> ssrjson.dumps(np.array([1, 2, 3]))
'[1,2,3]'
>>> ssrjson.dumps({"data": np.array([[1, 2], [3, 4]]), "score": np.float32(0.95)})
'{"data":[[1,2],[3,4]],"score":0.95}'
>>> ssrjson.dumps_to_bytes(np.arange(5))
b'[0,1,2,3,4]'

Supported NumPy types:

Category Types
Integers int8, int16, int32, int64, uint8, uint16, uint32, uint64
Floats float16, float32, float64
Boolean bool_
Array ndarray (C-contiguous, any supported element dtype, up to 32 dimensions)

np.float64 is a subclass of Python float and is always handled by the standard float path, regardless of whether setup_numpy_types has been called.

ndarray encoding writes element data directly from the array's memory buffer, bypassing Python object creation. Combined with the existing xjb64/xjb32 and yyjson-derived (for integers) encoding routines, this gives ssrJSON a significant performance advantage over converting to Python lists first. Indent is fully supported for ndarray output.

Note: setup_numpy_types must be called before any concurrent encoding in free-threading builds. The function itself is not thread-safe with respect to concurrent dumps/dumps_to_bytes calls. Once setup is complete, encoding is safe to call concurrently.

Simple benchmark shows ssrJSON outperforms orjson in encoding numpy arrays:

$ python dev_tools/numpy_benchmark.py --scale 10
numpy 2.4.2  |  scale=10  number=20  repeat=7  warmup=2
Python 3.14.3

[dumps_to_bytes: ssrjson vs orjson — numpy ndarray]

  int32_1d[1000000]  shape=1000000  dtype=int32  3906.2 KiB raw
    ssrjson  : median 1.83 ms  best 1.78 ms  out=4391695B  2.24 GiB/s
    orjson   : median 4.96 ms  best 4.88 ms  out=4391695B  843.99 MiB/s
    ssrjson is 2.72x faster than orjson (median); best 2.74x

  int64_1d[1000000]  shape=1000000  dtype=int64  7812.5 KiB raw
    ssrjson  : median 4.30 ms  best 4.13 ms  out=10982023B  2.38 GiB/s
    orjson   : median 8.79 ms  best 8.66 ms  out=10982023B  1.16 GiB/s
    ssrjson is 2.05x faster than orjson (median); best 2.10x

  float32_1d[1000000]  shape=1000000  dtype=float32  3906.2 KiB raw
    ssrjson  : median 9.15 ms  best 9.04 ms  out=10627011B  1.08 GiB/s
    orjson   : median 17.25 ms  best 17.18 ms  out=10627112B  587.55 MiB/s
    ssrjson is 1.88x faster than orjson (median); best 1.90x

  float64_1d[1000000]  shape=1000000  dtype=float64  7812.5 KiB raw
    ssrjson  : median 13.27 ms  best 12.94 ms  out=19269164B  1.35 GiB/s
    orjson   : median 19.12 ms  best 18.99 ms  out=19269255B  961.00 MiB/s
    ssrjson is 1.44x faster than orjson (median); best 1.47x

  float64_2d[1000x1000]  shape=1000x1000  dtype=float64  7812.5 KiB raw
    ssrjson  : median 13.50 ms  best 13.14 ms  out=19272764B  1.33 GiB/s
    orjson   : median 19.09 ms  best 19.04 ms  out=19272837B  962.88 MiB/s
    ssrjson is 1.41x faster than orjson (median); best 1.45x

  float64_3d[100x100x100]  shape=100x100x100  dtype=float64  7812.5 KiB raw
    ssrjson  : median 13.46 ms  best 13.13 ms  out=19291108B  1.33 GiB/s
    orjson   : median 19.48 ms  best 19.42 ms  out=19291190B  944.22 MiB/s
    ssrjson is 1.45x faster than orjson (median); best 1.48x

  int32_2d[1000x1000]  shape=1000x1000  dtype=int32  3906.2 KiB raw
    ssrjson  : median 1.17 ms  best 1.17 ms  out=5391602B  4.31 GiB/s
    orjson   : median 5.04 ms  best 5.00 ms  out=5391602B  1020.42 MiB/s
    ssrjson is 4.32x faster than orjson (median); best 4.29x

  bool_1d[1000000]  shape=1000000  dtype=bool  976.6 KiB raw
    ssrjson  : median 323.7 µs  best 323.1 µs  out=5500290B  15.83 GiB/s
    orjson   : median 3.24 ms  best 3.21 ms  out=5500290B  1.58 GiB/s
    ssrjson is 10.02x faster than orjson (median); best 9.92x

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

object_hook can be used in loads, and works the same as json.loads.

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.

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, 'free_threading': False, 'lockfree': 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 the xjb64 algorithm. xjb64 is a highly efficient algorithm for converting floating-point to strings.

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'
>>> json.dumps(-math.inf)
'-Infinity'
>>> ssrjson.dumps(-math.inf)
'-Infinity'
>>> ssrjson.loads("[infinity, Infinity, InFiNiTy, INFINITY]")  # allowed but not recommended to write `InFiNiTy` in JSON
[inf, inf, inf, inf]

The case of math.nan is similar. Note that NaN never has a sign.

>>> json.dumps(math.nan)
'NaN'
>>> ssrjson.dumps(math.nan)
'NaN'
>>> json.dumps(-math.nan)
'NaN'
>>> ssrjson.dumps(-math.nan)
'NaN'
>>> ssrjson.loads("[nan, Nan, NaN, NAN]")  # allowed but not recommended to write `Nan` in JSON
[nan, nan, nan, nan]

Free Threading

ssrJSON experimentally supports free-threading (Python >= 3.14). You can find stable wheel releases on PyPI. When building from source, enable this feature by specifying -DBUILD_FREE_THREADING=ON. In that build, during encoding ssrJSON acquires locks on dict and list objects from outer to inner; if another thread attempts to lock those objects in a different order, a deadlock may occur — this is expected behavior. If you encounter unexpected crashes, please file an issue. Decoding is lock-free.

If you require a lock-free encoding variant, build from source with -DFREE_THREADING_LOCKFREE=ON. Compared with the lock-based version, the lock-free version achieves approximately a 13% improvement in single-threaded encoding performance. In that configuration, multi-threaded modifications of the same dict/list can cause the program to crash; users are responsible for ensuring there are no race conditions. Lock-free builds are not distributed on PyPI.

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.
  • xjb64: ssrJSON employs xjb64 for high-performance floating-point encoding.
  • xxHash: ssrJSON leverages xxHash to efficiently compute hash values for key caching.
  • klib: ssrJSON uses khash to implement circular detection in free-threading build.

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.20.tar.gz (3.4 MB 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.20-cp314-cp314t-win_amd64.whl (845.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_x86_64.whl (857.4 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.34+ x86-64

ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_aarch64.whl (274.6 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.34+ ARM64

ssrjson-0.0.20-cp314-cp314t-macosx_11_0_arm64.whl (266.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

ssrjson-0.0.20-cp314-cp314-win_amd64.whl (832.3 kB view details)

Uploaded CPython 3.14Windows x86-64

ssrjson-0.0.20-cp314-cp314-manylinux_2_34_x86_64.whl (820.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

ssrjson-0.0.20-cp314-cp314-manylinux_2_34_aarch64.whl (270.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ ARM64

ssrjson-0.0.20-cp314-cp314-macosx_11_0_arm64.whl (265.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

ssrjson-0.0.20-cp313-cp313-win_amd64.whl (813.3 kB view details)

Uploaded CPython 3.13Windows x86-64

ssrjson-0.0.20-cp313-cp313-manylinux_2_34_x86_64.whl (819.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

ssrjson-0.0.20-cp313-cp313-manylinux_2_34_aarch64.whl (270.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ ARM64

ssrjson-0.0.20-cp313-cp313-macosx_11_0_arm64.whl (265.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ssrjson-0.0.20-cp312-cp312-win_amd64.whl (813.4 kB view details)

Uploaded CPython 3.12Windows x86-64

ssrjson-0.0.20-cp312-cp312-manylinux_2_34_x86_64.whl (820.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

ssrjson-0.0.20-cp312-cp312-manylinux_2_34_aarch64.whl (270.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ ARM64

ssrjson-0.0.20-cp312-cp312-macosx_11_0_arm64.whl (265.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ssrjson-0.0.20-cp311-cp311-win_amd64.whl (792.6 kB view details)

Uploaded CPython 3.11Windows x86-64

ssrjson-0.0.20-cp311-cp311-manylinux_2_34_x86_64.whl (800.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

ssrjson-0.0.20-cp311-cp311-manylinux_2_34_aarch64.whl (271.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ ARM64

ssrjson-0.0.20-cp311-cp311-macosx_11_0_arm64.whl (266.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

ssrjson-0.0.20-cp310-cp310-win_amd64.whl (792.8 kB view details)

Uploaded CPython 3.10Windows x86-64

ssrjson-0.0.20-cp310-cp310-manylinux_2_34_x86_64.whl (800.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

ssrjson-0.0.20-cp310-cp310-manylinux_2_34_aarch64.whl (271.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ ARM64

ssrjson-0.0.20-cp310-cp310-macosx_11_0_arm64.whl (266.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: ssrjson-0.0.20.tar.gz
  • Upload date:
  • Size: 3.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20.tar.gz
Algorithm Hash digest
SHA256 2c67bf5673867ea3e6e9d10fb0f94c644ec504a0270dabbe92fb36e6b361c806
MD5 12ea6b50068b0f396f8e5348bf1b717a
BLAKE2b-256 54e063015d359820c707760ff3434ea70919a22bf6b41f151ffd767accab6cad

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20.tar.gz:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: ssrjson-0.0.20-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 845.7 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 8f41cbeac65287a953bf365e461c8ae4c9aaaa27024bf56b2b62fb50b309aa4d
MD5 036a6f56861e4a1e0316d4287116050b
BLAKE2b-256 f387657565a16df3eb784c645b0a690a07c17d351bb5d31af9ea5c9998005a98

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314t-win_amd64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a7b4a814b76954a1bf481e8e39f7e9ede71d873720dab8c278dcc6db7293e3cb
MD5 7fc9cccfb8b3c6a64f553432164bb63b
BLAKE2b-256 faa260b81b7cfdc3c4620f6626e34aeba25a654d1e2c0a8ee38f8f579f05b102

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 57b2c9935581e1c7d2c36d652c958e8424cef17151f4de638dc8a4128fc43cc4
MD5 39a980dccf0b7372692e9a783c79eae0
BLAKE2b-256 ba2db50f5b9e5c7607edc76d7e48a21bd19ddf6e1191b31ff81db9f0ed233145

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314t-manylinux_2_34_aarch64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff2a212a617e9b0db90e87ea2925c0608396513f5371e36cbc2a367617a90656
MD5 8435960c31f1107411d758c218b795d8
BLAKE2b-256 2753d6e3624cad3fcfe1ce676c4f5262cd3b78fe157538af66c003efce4c9b53

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: ssrjson-0.0.20-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 832.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 dcf48a5e4319172202232536d00e6ed6717d46bb072771204a975f88f8a0d94f
MD5 78056ce3dbc282038af176ce9662e806
BLAKE2b-256 d075bc3c57db00128b26088ebf2ba407aab3680429595b871fb3a041153fe503

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314-win_amd64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 920fd0141307a8c0ec53346b470352423abd314005106108f6af2c414772e64d
MD5 e2e6b7b37edd46e1775a0e521f22f725
BLAKE2b-256 1423d691db0fe31ffcf495873fc5fec99337285b61788d0689b2055f237e7c7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 123c20fa44cd512fe1d3d5257c9f9acff60e279701a99b62d52960e405f13072
MD5 2e4030fa5fd7013d622b25b171a5443e
BLAKE2b-256 6ec50bdf0f3973e36d79a76675fb59aeb3e071c5f5d634432ec4e0dc5ae8e9a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314-manylinux_2_34_aarch64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1cdd11617045d3de61d3a5471622603e7ad09c6f83a95a12c6e04b56c33510c
MD5 640548598ebb93a1e5a13e56220b5d85
BLAKE2b-256 c283b71417b505b9a96fa297ff94123e6b7ae60bb2fd6dfd0b4cd2bf4b5fbf8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: ssrjson-0.0.20-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 813.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 51dc3f7616f171e4a1c42658ab4ad8099c0996da28b2d05285be8e7cdc904b5a
MD5 a69d591558fbdde9ca4f9acaae0e57b5
BLAKE2b-256 52b99aa5efb47849bfa2ba340f967e14274d3f60064d3d81892527b390c104a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp313-cp313-win_amd64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4789525a430275453bc2c7971f879bfa76981e51317a906e1ed8782af3e3958d
MD5 6b0a87c650b6460b99b05789d2220b8d
BLAKE2b-256 1eb535750b787b53a0b63ada9fb6e75a7bb68c35a55e43847aba88bc3106fbe7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp313-cp313-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp313-cp313-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 01ec71e1db90b6a04ec6e67514d36eb93c053bd80a1fe8bce445b6c5b8f77cf0
MD5 887270b2a140e78ca65a64739ff2ee4f
BLAKE2b-256 70150348d282ed0832ff6df12792f58126464eb854c1bb70599857cba3226150

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp313-cp313-manylinux_2_34_aarch64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 663d1e8874ff0c3235f59ab2852d050b7bca07cea4817179962c2d8632948c6c
MD5 8e2741bbaa8c0b664f41782030cef1ff
BLAKE2b-256 a17d16905c5bc6bcdd7741f592ce795836b1ec2cb3d0a1a03b97c98ded29fa08

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: ssrjson-0.0.20-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 813.4 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2e46feb68bd1c9e6a739119b3f4797a96fe39df9e2a851a68d1261d78c0bf649
MD5 ed8c6e28e9f34f7d972fb4fa99e75480
BLAKE2b-256 3df7780cacd0d92020f6f443454c22363b7b403db890ff207be12f5c1da2f73d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp312-cp312-win_amd64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7c92fb4ea467acfffe1386596ebb621d1d6fc4c557b67d7755e20d7f7469c64e
MD5 11f7f9363dbf88c60dd70f7699f3b434
BLAKE2b-256 4a56698978d0755520b6a1254839ecab93d77799203914aa0b8736807cd13fe4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp312-cp312-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp312-cp312-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 f35986f772c6fb6ced277536df1196f96b4e82b2c95a40824acf1538e5516f43
MD5 b3c4d9d07471132e7476b2abfe355627
BLAKE2b-256 4b39bd9cac4d6e774add196e4125a8c5f8cad2ef5ce1cdd34f8c9f4782de0dad

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp312-cp312-manylinux_2_34_aarch64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d6586ff42a35161388503384996f56f0b5faef7ab4c92ff987b2137bbb84f6b
MD5 9d9efb31b501747078b8de88df5dcf84
BLAKE2b-256 0f4a542f1cc6122b149ad6187f105be877336c6508261ef81ef6d7846a139f4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: ssrjson-0.0.20-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 792.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e703cf3c19b561557a7f20fce726578afdfd4b3e88bbfb3259675fd7fc7289dd
MD5 8d432100d3f32acb1b4e4a67b3657520
BLAKE2b-256 c3fbb0150488c9bea0bde6e092f2cb420d7482bf7d905cbaa687c80d3ba5d4d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp311-cp311-win_amd64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e0087f527b8b46bcaa56091aa150531b67b84852bd3d66fbb7f41aae1420759f
MD5 4812bde7dc13afc7db3ff34ac586e309
BLAKE2b-256 bb27933b23803fb2f068e2370c47437ed0b852ba959e1679e7b4ccf873217a29

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp311-cp311-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp311-cp311-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 1e08f9eaa12394d15d1224816cab41a5cc0da30a52963c5bd381a79d7ad7f911
MD5 da600eeb4d70560072e1c75d93fa1d04
BLAKE2b-256 9a6a9306cc572ee69f293dff5db41f58aca709ead326b381b5ca91e3224c320d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp311-cp311-manylinux_2_34_aarch64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 27eb1391cae6cd9047f47dca409ed29ef2e45e42a5f9e482089c0b546f683318
MD5 4f3aaf9f1daf3759dfc11842eab700ce
BLAKE2b-256 eebedc5a3e8f98461eb03a843f4232f874f9918d43282e16cd61ea072f8ba545

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: ssrjson-0.0.20-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 792.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssrjson-0.0.20-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1c1086d22c465a647a159580d2c8d46c9044facd7f972932cca0f084a99dc23d
MD5 42430652cbb2669bb06fe3511874b154
BLAKE2b-256 fa5d9b5f7970985c5dd006ee6fa3914c41971775c8dc4560239e9bc365b1cc21

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp310-cp310-win_amd64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 bfee69ed3872fae3816f0b3950b2686cebbd473a51c3e87d18aa6287950062da
MD5 fa76e396a48f65da352e70a1d456e0aa
BLAKE2b-256 26b013b31cd903063fb72d9b05cfacc64c52d9b8092a2e26555aa7456d87b84b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp310-cp310-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp310-cp310-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 6dd2ab2c0a413de7d8bb955e4a7616c9e92ecf0152b6e40258bb63f35560b6e5
MD5 3864bd763ebcdcd8a43905595f5e608b
BLAKE2b-256 2498921c431366607d9d02afb59d8955171d09f22fbc7b648d6b0f32962296d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp310-cp310-manylinux_2_34_aarch64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ssrjson-0.0.20-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ssrjson-0.0.20-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a9612413d8f6087f4e8859f69f5e7f9393e72fa2362c0851357668727c6cd43d
MD5 e9a2447c2de3305540c8e63b4851c56b
BLAKE2b-256 076f81f1bf629e50d35182dd59507fe6d6cda8049aa3fbf4b1ecec83d8c6a41b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssrjson-0.0.20-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on Antares0982/ssrJSON

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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