Skip to content

Commit 6d5f69b

Browse files
authored
fix #18 use strict=False (#20)
* fix #18 use strict=False * improve cov
1 parent 431b8ee commit 6d5f69b

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

src/fuzzy_json/decoder.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def repair_json(json_str: str) -> str:
272272

273273
def loads(json_str: str, auto_repair: bool = False) -> dict[str, Any]:
274274
try:
275-
return json.loads(json_str)
275+
return json.loads(json_str, strict=False)
276276
except json.decoder.JSONDecodeError:
277277
if not auto_repair:
278278
raise
@@ -282,4 +282,4 @@ def loads(json_str: str, auto_repair: bool = False) -> dict[str, Any]:
282282
except Exception as e:
283283
raise json.decoder.JSONDecodeError(f"Failed to repair JSON: {e}", json_str, 0)
284284

285-
return json.loads(repaired_json)
285+
return json.loads(repaired_json, strict=False)

src/fuzzy_json/tests/__snapshots__/test_decoder.ambr

+8
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@
5050
"subject's": 'Introducing the Mandelic Acid and Allantoin Acne-Care Calming Ampoule',
5151
})
5252
# ---
53+
# name: test_repaired_json_invalid_case_special
54+
dict({
55+
'a': '''
56+
57+
58+
''',
59+
})
60+
# ---
5361
# name: test_repaired_json_simple_case
5462
dict({
5563
})

src/fuzzy_json/tests/test_decoder.py

+16-14
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
11
import json
22
from pathlib import Path
3-
from typing import Any
43

54
import pytest
65
from syrupy.assertion import SnapshotAssertion
76

87
from ..decoder import loads, repair_json
98

109

11-
def load_repaired_json(json_str: str) -> dict[str, Any]:
12-
return json.loads(repair_json(json_str))
13-
14-
1510
def test_repaired_json_simple_case(snapshot: SnapshotAssertion) -> None:
16-
assert snapshot == load_repaired_json("{}")
17-
assert snapshot == load_repaired_json('{"foo": "bar"}')
18-
assert snapshot == load_repaired_json('{"foo": "bar", "baz": "qux"}')
19-
assert snapshot == load_repaired_json('{"foo": "bar", "baz": "qux", "quux": "corge"}')
11+
assert snapshot == json.loads(repair_json("{}"))
12+
assert snapshot == json.loads(repair_json('{"foo": "bar"}'))
13+
assert snapshot == json.loads(repair_json('{"foo": "bar", "baz": "qux"}'))
14+
assert snapshot == json.loads(repair_json('{"foo": "bar", "baz": "qux", "quux": "corge"}'))
2015
# add more nested objects
21-
assert snapshot == load_repaired_json('{"foo": {"bar": "baz"}}')
22-
assert snapshot == load_repaired_json('{"foo": {"bar": {"baz": "qux"}}}')
23-
assert snapshot == load_repaired_json('{"foo": {"bar": {"baz": {"qux": "quux"}}}}')
16+
assert snapshot == json.loads(repair_json('{"foo": {"bar": "baz"}}'))
17+
assert snapshot == json.loads(repair_json('{"foo": {"bar": {"baz": "qux"}}}'))
18+
assert snapshot == json.loads(repair_json('{"foo": {"bar": {"baz": {"qux": "quux"}}}}'))
2419

2520

2621
@pytest.mark.parametrize(
@@ -32,7 +27,7 @@ def test_repaired_json_vaild_case(snapshot: SnapshotAssertion, test_filename: Pa
3227
content = test_filename.read_text()
3328
parsed_by_std_json = json.loads(content)
3429

35-
parsed_by_fixed_json = load_repaired_json(content)
30+
parsed_by_fixed_json = json.loads(repair_json(content))
3631
assert snapshot == parsed_by_fixed_json
3732
assert parsed_by_fixed_json == parsed_by_std_json
3833

@@ -44,8 +39,15 @@ def test_repaired_json_vaild_case(snapshot: SnapshotAssertion, test_filename: Pa
4439
)
4540
def test_repaired_json_invaild_case(snapshot: SnapshotAssertion, test_filename: Path) -> None:
4641
content = test_filename.read_text()
47-
result = load_repaired_json(content)
42+
result = loads(content, auto_repair=True)
43+
assert snapshot == result
44+
45+
46+
def test_repaired_json_invalid_case_special(snapshot: SnapshotAssertion) -> None:
47+
content = '{"a": "\n"}'
48+
result = loads(content, auto_repair=True)
4849
assert snapshot == result
50+
assert json.loads(content, strict=False) == result
4951

5052

5153
def test_repair_json_fail() -> None:

0 commit comments

Comments
 (0)