json-repair 0.36.0__tar.gz → 0.37.0__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {json_repair-0.36.0/src/json_repair.egg-info → json_repair-0.37.0}/PKG-INFO +1 -1
- {json_repair-0.36.0 → json_repair-0.37.0}/pyproject.toml +1 -1
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/json_parser.py +9 -4
- {json_repair-0.36.0 → json_repair-0.37.0/src/json_repair.egg-info}/PKG-INFO +1 -1
- {json_repair-0.36.0 → json_repair-0.37.0}/tests/test_json_repair.py +1 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/LICENSE +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/README.md +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/setup.cfg +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/__init__.py +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/__main__.py +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/json_context.py +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/json_repair.py +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/py.typed +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair/string_file_wrapper.py +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair.egg-info/SOURCES.txt +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair.egg-info/dependency_links.txt +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair.egg-info/entry_points.txt +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/src/json_repair.egg-info/top_level.txt +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/tests/test_coverage.py +0 -0
- {json_repair-0.36.0 → json_repair-0.37.0}/tests/test_performance.py +0 -0
@@ -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.
|
6
|
+
version = "0.37.0"
|
7
7
|
license = {file = "LICENSE"}
|
8
8
|
authors = [
|
9
9
|
{ name="Stefano Baccianella", email="4247706+mangiucugna@users.noreply.github.com" },
|
@@ -438,7 +438,7 @@ class JSONParser:
|
|
438
438
|
string_acc += char
|
439
439
|
self.index += 1
|
440
440
|
char = self.get_char_at()
|
441
|
-
if char and
|
441
|
+
if char and string_acc[-1] == "\\":
|
442
442
|
# This is a special case, if people use real strings this might happen
|
443
443
|
self.log("Found a stray escape sequence, normalizing it")
|
444
444
|
if char in [rstring_delimiter, "t", "n", "r", "b", "\\"]:
|
@@ -589,7 +589,7 @@ class JSONParser:
|
|
589
589
|
i += 1
|
590
590
|
next_c = self.get_char_at(i)
|
591
591
|
while next_c and next_c != ":":
|
592
|
-
if next_c
|
592
|
+
if next_c in [",", "]", "}"] or (
|
593
593
|
next_c == rstring_delimiter
|
594
594
|
and self.get_char_at(i - 1) != "\\"
|
595
595
|
):
|
@@ -646,10 +646,15 @@ class JSONParser:
|
|
646
646
|
self.log(
|
647
647
|
"While parsing a string, we missed the closing quote, ignoring",
|
648
648
|
)
|
649
|
+
string_acc = string_acc.rstrip()
|
649
650
|
else:
|
650
651
|
self.index += 1
|
651
652
|
|
652
|
-
|
653
|
+
if missing_quotes or (string_acc and string_acc[-1] == "\n"):
|
654
|
+
# Clean the whitespaces for some corner cases
|
655
|
+
string_acc = string_acc.rstrip()
|
656
|
+
|
657
|
+
return string_acc
|
653
658
|
|
654
659
|
def parse_number(self) -> Union[float, int, str, JSONReturnType]:
|
655
660
|
# <number> is a valid real number expressed in one of a number of given formats
|
@@ -661,7 +666,7 @@ class JSONParser:
|
|
661
666
|
number_str += char
|
662
667
|
self.index += 1
|
663
668
|
char = self.get_char_at()
|
664
|
-
if
|
669
|
+
if number_str and number_str[-1] in "-eE/,":
|
665
670
|
# The number ends with a non valid character for a number/currency, rolling back one
|
666
671
|
number_str = number_str[:-1]
|
667
672
|
self.index -= 1
|
@@ -109,6 +109,7 @@ def test_missing_and_mixed_quotes():
|
|
109
109
|
assert repair_json('{"key": "lorem ipsum ... "sic " tamet. ...}') == '{"key": "lorem ipsum ... \\"sic \\" tamet. ..."}'
|
110
110
|
assert repair_json('{"key": value , }') == '{"key": "value"}'
|
111
111
|
assert repair_json('{"comment": "lorem, "ipsum" sic "tamet". To improve"}') == '{"comment": "lorem, \\"ipsum\\" sic \\"tamet\\". To improve"}'
|
112
|
+
assert repair_json('{"key": "v\"alu\"e"} key:') == '{"key": "v\\"alu\\"e"}'
|
112
113
|
|
113
114
|
def test_array_edge_cases():
|
114
115
|
assert repair_json("[1, 2, 3,") == "[1, 2, 3]"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|