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)