Skip to content

Commit 692e5ae

Browse files
committed
fix: Improve JSON object parsing to allow for multiple top-level values after object closure. Add tests for various edge cases in JSON repair functionality.
1 parent 919ccc1 commit 692e5ae

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/json_repair/parse_object.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,13 @@ def parse_object(self: "JSONParser") -> dict[str, JSONReturnType]:
129129
self.index += 1
130130
self.skip_whitespaces_at()
131131

132+
# If what follows is not a quoted key or a new container, leave it to the
133+
# outer parser by setting value context so primitives can be parsed at top-level.
134+
next_char = self.get_char_at() or ""
135+
if next_char not in ['"', "'", "{", "["]:
136+
self.context.set(ContextValues.OBJECT_VALUE)
137+
return obj
138+
132139
# Try to parse additional key-value pairs
133140
while self.get_char_at():
134141
self.skip_whitespaces_at()

tests/test_parse_object.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,9 @@ def test_parse_object_edge_cases():
8585
assert repair_json('{"key": , "key2": "value2"}') == '{"key": "", "key2": "value2"}'
8686
assert repair_json('{"key": "value"}, "key2": "value2"}') == '{"key": "value", "key2": "value2"}'
8787
assert repair_json('{"key": "value"}, "key2": }') == '{"key": "value", "key2": ""}'
88+
assert repair_json('{"key": "value"}, []') == '[{"key": "value"}, []]'
89+
assert repair_json('{"key": "value"}, ["abc"]') == '[{"key": "value"}, ["abc"]]'
90+
assert repair_json('{"key": "value"}, true') == '[{"key": "value"}, true]'
91+
assert repair_json('{"key": "value"}, null') == '[{"key": "value"}, null]'
92+
assert repair_json('{"key": "value"}, 123') == '[{"key": "value"}, 123]'
93+
assert repair_json('{"key": "value"}, {}') == '[{"key": "value"}, {}]'

0 commit comments

Comments
 (0)