Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support for number-like strings #16

Merged
merged 1 commit into from
Feb 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions src/json_repair/json_repair.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,13 +245,16 @@ def parse_number(self) -> Union[float, int, str]:
self.index += 1
char = self.get_char_at()
if number_str:
if "." in number_str or "e" in number_str or "E" in number_str:
return float(number_str)
elif number_str == "-":
# If there is a stray "-" this will throw an exception, throw away this character
return self.parse_json()
else:
return int(number_str)
try:
if "." in number_str or "e" in number_str or "E" in number_str:
return float(number_str)
elif number_str == "-":
# If there is a stray "-" this will throw an exception, throw away this character
return self.parse_json()
else:
return int(number_str)
except ValueError:
return number_str
else:
# This is a string then
return self.parse_string()
Expand Down
8 changes: 8 additions & 0 deletions tests/test_json_repair.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@ def test_repair_json_corner_cases_generate_by_gpt():
# Test with null values
assert repair_json('{"key": null}') == '{"key": null}'

# Test with numeric-like values
assert repair_json('{"key": 10-20}') == '{"key": "10-20"}'
assert repair_json('{"key": 1.1.1}') == '{"key": "1.1.1"}'


def test_repair_json_corner_cases_generate_by_gpt_with_objects():
# Test with nested JSON
Expand Down Expand Up @@ -221,6 +225,10 @@ def test_repair_json_corner_cases_generate_by_gpt_with_objects():
# Test with null values
assert repair_json('{"key": null}', True) == {"key": None}

# Test with numeric-like values
assert repair_json('{"key": 10-20}', True) == {"key": "10-20"}
assert repair_json('{"key": 1.1.1}', True) == {"key": "1.1.1"}

def test_repair_json_skip_json_loads():
assert repair_json('{"key": true, "key2": false, "key3": null}', skip_json_loads=True) == '{"key": true, "key2": false, "key3": null}'
assert repair_json('{"key": true, "key2": false, "key3": null}', return_objects=True, skip_json_loads=True) == {"key": True, "key2": False, "key3": None}
Expand Down
Loading