diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py index 627a11cc..5c866e3b 100644 --- a/pre_commit_hooks/pretty_format_json.py +++ b/pre_commit_hooks/pretty_format_json.py @@ -1,12 +1,13 @@ from __future__ import annotations import argparse -import json import sys from difflib import unified_diff from typing import Mapping from typing import Sequence +import simplejson as json + def _get_pretty_format( contents: str, @@ -23,7 +24,7 @@ def pairs_first(pairs: Sequence[tuple[str, str]]) -> Mapping[str, str]: after.sort() return dict(before + after) json_pretty = json.dumps( - json.loads(contents, object_pairs_hook=pairs_first), + json.loads(contents, object_pairs_hook=pairs_first, use_decimal=True), indent=indent, ensure_ascii=ensure_ascii, ) diff --git a/testing/resources/high_precision_numbers.json b/testing/resources/high_precision_numbers.json new file mode 100644 index 00000000..740fef71 --- /dev/null +++ b/testing/resources/high_precision_numbers.json @@ -0,0 +1,3 @@ +{ + "foo": 4.4257052820783003 +} diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py index 5ded724a..16a3328a 100644 --- a/tests/pretty_format_json_test.py +++ b/tests/pretty_format_json_test.py @@ -23,6 +23,8 @@ def test_parse_num_to_int(): ('unsorted_pretty_formatted_json.json', 1), ('non_ascii_pretty_formatted_json.json', 1), ('pretty_formatted_json.json', 0), + # numbers with high precision should not be modified. + ('high_precision_numbers.json', 0), ), ) def test_main(filename, expected_retval):