#json #serde-json #nan #infinity #python #deserialize-json

json-forensics

A crate that adds a read adapter to deal with bad Python caused JSON payloads (NaNs and Infinities)

1 unstable release

0.1.1 Mar 30, 2023

#2366 in Parser implementations

Download history 505/week @ 2024-03-13 665/week @ 2024-03-20 362/week @ 2024-03-27 540/week @ 2024-04-03 500/week @ 2024-04-10 589/week @ 2024-04-17 318/week @ 2024-04-24 257/week @ 2024-05-01 181/week @ 2024-05-08 241/week @ 2024-05-15 127/week @ 2024-05-22 136/week @ 2024-05-29 139/week @ 2024-06-05 271/week @ 2024-06-12 120/week @ 2024-06-19 99/week @ 2024-06-26

687 downloads per month

BSD-3-Clause

10KB
178 lines

rust-json-forensics

This crate exposes a function that takes a byteslice and:

  • Converts the invalid JSON tokens NaN and Infinity into 0
  • Replaces all integers that would cause an overflow in serde-json with 0

This is just to get the JSON to parse. All operations happen in-place.

This is useful because the Python JSON library traditionally emits invalid JSON if NaN and Infinity values are encountered. If you have to support clients like this, this wrapper can be used to still deserialize such a JSON document.

Successor of python-json-read-adapter


lib.rs:

This crate implements a Read adapter that converts the invalid JSON tokens NaN and Infinity into other tokens without otherwise distorting the stream. It achieves this by converting NaN and Infinity into 0.0.

This is useful because the Python JSON library traditionally emits invalid JSON if NaN and Infinity values are encountered. If you have to support clients like this, this wrapper can be used to still deserialize such a JSON document.

This is just a way to get this to parse and 0 is a value that can be inserted in a standardized way that fits without changing any of the positions.

Example Conversion

The following JSON document:

{"nan":NaN,"inf":Infinity,"-inf":-Infinity}

is thus converted to:

{"nan":0  ,"inf":0       ,"-inf":-0       }

serde support

If the serde feature is enabled then the crate provides some basic wrappers around serde_json to deserialize quickly and also by running the conversions.

Dependencies

~0–260KB