File size: 695 Bytes
0b00897 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | """Strict JSON decoding without silent key loss or non-JSON numeric values."""
import json
import math
def _object(pairs):
result = {}
for key, value in pairs:
if key in result:
raise ValueError(f"Duplicate JSON key: {key!r}.")
result[key] = value
return result
def _constant(value):
raise ValueError(f"{value} is not a valid JSON value.")
def _float(value):
number = float(value)
if not math.isfinite(number):
raise ValueError("JSON number exceeds the supported finite range.")
return number
def strict_json_loads(text):
return json.loads(text, object_pairs_hook=_object, parse_constant=_constant, parse_float=_float)
|