json-repair 0.15.1__tar.gz → 0.15.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: json_repair
3
- Version: 0.15.1
3
+ Version: 0.15.3
4
4
  Summary: A package to repair broken json strings
5
5
  Author-email: Stefano Baccianella <4247706+mangiucugna@users.noreply.github.com>
6
6
  License: MIT License
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.0"]
3
3
  build-backend = "setuptools.build_meta"
4
4
  [project]
5
5
  name = "json_repair"
6
- version = "0.15.1"
6
+ version = "0.15.3"
7
7
  license = {file = "LICENSE"}
8
8
  authors = [
9
9
  { name="Stefano Baccianella", email="4247706+mangiucugna@users.noreply.github.com" },
@@ -78,7 +78,7 @@ class JSONParser:
78
78
  elif char == "“":
79
79
  return self.parse_string(string_quotes=["“", "”"])
80
80
  # <number> starts with [0-9] or minus
81
- elif char.isdigit() or char == "-":
81
+ elif char.isdigit() or char == "-" or char == ".":
82
82
  return self.parse_number()
83
83
  # <boolean> could be (T)rue or (F)alse or (N)ull
84
84
  elif char.lower() in ["t", "f", "n"]:
@@ -329,7 +329,7 @@ class JSONParser:
329
329
  def parse_number(self) -> Union[float, int, str]:
330
330
  # <number> is a valid real number expressed in one of a number of given formats
331
331
  number_str = ""
332
- number_chars = set("0123456789-.eE")
332
+ number_chars = set("0123456789-.eE/")
333
333
  char = self.get_char_at()
334
334
  while char and char in number_chars:
335
335
  number_str += char
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: json_repair
3
- Version: 0.15.1
3
+ Version: 0.15.3
4
4
  Summary: A package to repair broken json strings
5
5
  Author-email: Stefano Baccianella <4247706+mangiucugna@users.noreply.github.com>
6
6
  License: MIT License
@@ -110,6 +110,8 @@ def test_repair_json():
110
110
  assert repair_json('{""answer":[{""traits":""Female aged 60+",""answer1":""5"}]}') == '{"answer": [{"traits": "Female aged 60+", "answer1": "5"}]}'
111
111
  assert repair_json('{"key":"",}') == '{"key": ",}"}'
112
112
  assert repair_json('{ "words": abcdef", "numbers": 12345", "words2": ghijkl" }') == '{"words": "abcdef", "numbers": 12345, "words2": "ghijkl"}'
113
+ assert repair_json('{"key": 1/3}') == '{"key": "1/3"}'
114
+ assert repair_json('{"key": .25}') == '{"key": 0.25}'
113
115
 
114
116
 
115
117
  def test_repair_json_with_objects():
@@ -255,12 +257,14 @@ def test_repair_json_corner_cases_generate_by_gpt_with_objects():
255
257
  assert repair_json('{"key": 10-20}', True) == {"key": "10-20"}
256
258
  assert repair_json('{"key": 1.1.1}', True) == {"key": "1.1.1"}
257
259
 
260
+
258
261
  def test_repair_json_skip_json_loads():
259
262
  assert repair_json('{"key": true, "key2": false, "key3": null}', skip_json_loads=True) == '{"key": true, "key2": false, "key3": null}'
260
263
  assert repair_json('{"key": true, "key2": false, "key3": null}', return_objects=True, skip_json_loads=True) == {"key": True, "key2": False, "key3": None}
261
264
  assert repair_json('{"key": true, "key2": false, "key3": }', skip_json_loads=True) == '{"key": true, "key2": false, "key3": ""}'
262
265
  assert loads('{"key": true, "key2": false, "key3": }', skip_json_loads=True) == {"key": True, "key2": False, "key3": ""}
263
266
 
267
+
264
268
  def test_repair_json_from_file():
265
269
  import os
266
270
  import tempfile
@@ -277,3 +281,8 @@ def test_repair_json_from_file():
277
281
  finally:
278
282
  # Clean up - delete the temporary file
279
283
  os.remove(temp_path)
284
+
285
+
286
+ assert repair_json('{"key": 1/3, "foo": "bar"}') == '{"key": "1/3", "foo": "bar"}'
287
+ assert repair_json('{"here": "now", "key": 1/3, "foo": "bar"}') == '{"here": "now", "key": "1/3", "foo": "bar"}'
288
+ assert repair_json('{"key": 12345/67890}') == '{"key": "12345/67890"}'
File without changes
File without changes
File without changes