json-repair 0.30.3__py3-none-any.whl → 0.32.0__py3-none-any.whl
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.
- json_repair/json_parser.py +24 -1
- {json_repair-0.30.3.dist-info → json_repair-0.32.0.dist-info}/METADATA +1 -1
- {json_repair-0.30.3.dist-info → json_repair-0.32.0.dist-info}/RECORD +7 -7
- {json_repair-0.30.3.dist-info → json_repair-0.32.0.dist-info}/LICENSE +0 -0
- {json_repair-0.30.3.dist-info → json_repair-0.32.0.dist-info}/WHEEL +0 -0
- {json_repair-0.30.3.dist-info → json_repair-0.32.0.dist-info}/entry_points.txt +0 -0
- {json_repair-0.30.3.dist-info → json_repair-0.32.0.dist-info}/top_level.txt +0 -0
json_repair/json_parser.py
CHANGED
@@ -124,6 +124,9 @@ class JSONParser:
|
|
124
124
|
|
125
125
|
self.skip_whitespaces_at()
|
126
126
|
|
127
|
+
# Save this index in case we need find a duplicate key
|
128
|
+
rollback_index = self.index
|
129
|
+
|
127
130
|
# <member> starts with a <string>
|
128
131
|
key = ""
|
129
132
|
while self.get_char_at():
|
@@ -132,7 +135,14 @@ class JSONParser:
|
|
132
135
|
if key != "" or (key == "" and self.get_char_at() == ":"):
|
133
136
|
# If the string is empty but there is a object divider, we are done here
|
134
137
|
break
|
138
|
+
if ContextValues.ARRAY in self.context.context and key in obj:
|
139
|
+
self.log(
|
140
|
+
"While parsing an object we found a duplicate key, closing the object here and rolling back the index",
|
141
|
+
)
|
142
|
+
self.index = rollback_index - 1
|
143
|
+
break
|
135
144
|
|
145
|
+
# Skip filler whitespaces
|
136
146
|
self.skip_whitespaces_at()
|
137
147
|
|
138
148
|
# We reached the end here
|
@@ -322,11 +332,24 @@ class JSONParser:
|
|
322
332
|
else:
|
323
333
|
# OK but this could still be some garbage at the end of the string
|
324
334
|
# So we need to check if we find a new lstring_delimiter afterwards
|
325
|
-
# If we do, this is a missing delimiter
|
335
|
+
# If we do, maybe this is a missing delimiter
|
326
336
|
i = self.skip_to_character(character=lstring_delimiter, idx=i)
|
337
|
+
if doubled_quotes:
|
338
|
+
i = self.skip_to_character(
|
339
|
+
character=lstring_delimiter, idx=i
|
340
|
+
)
|
327
341
|
next_c = self.get_char_at(i)
|
328
342
|
if not next_c:
|
329
343
|
rstring_delimiter_missing = False
|
344
|
+
else:
|
345
|
+
# But again, this could just be something a bit stupid like "lorem, "ipsum" sic"
|
346
|
+
# Check if we find a : afterwards (skipping space)
|
347
|
+
i = self.skip_whitespaces_at(
|
348
|
+
idx=i + 1, move_main_index=False
|
349
|
+
)
|
350
|
+
next_c = self.get_char_at(i)
|
351
|
+
if next_c and next_c != ":":
|
352
|
+
rstring_delimiter_missing = False
|
330
353
|
else:
|
331
354
|
# There could be a case in which even the next key:value is missing delimeters
|
332
355
|
# because it might be a systemic issue with the output
|
@@ -1,13 +1,13 @@
|
|
1
1
|
json_repair/__init__.py,sha256=c4L2kZrHvWEKfj_ODU2naliNuvU6FlFVxtF0hbLe6s8,178
|
2
2
|
json_repair/__main__.py,sha256=EsJb-y89uZEvGQQg1GdIDWzfDwfOMvVekKEtdguQXCM,67
|
3
3
|
json_repair/json_context.py,sha256=mm6dOyrPJ1sDskTORZSXCW7W9-5veMlUKqXQ3Hw3EG4,971
|
4
|
-
json_repair/json_parser.py,sha256=
|
4
|
+
json_repair/json_parser.py,sha256=zOHJg9Uv-8-UkDV0curmcmqcH_hLOvyXVjitPCmE6Kw,30326
|
5
5
|
json_repair/json_repair.py,sha256=LINLSJBs3cJMfs1YRDaIpfWR5PJLs87Oe06G5yQjY18,9729
|
6
6
|
json_repair/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
json_repair/string_file_wrapper.py,sha256=EHLhNBWoyUitzT08thytYJiNZh_klEFwfT8zutPSdb4,3905
|
8
|
-
json_repair-0.
|
9
|
-
json_repair-0.
|
10
|
-
json_repair-0.
|
11
|
-
json_repair-0.
|
12
|
-
json_repair-0.
|
13
|
-
json_repair-0.
|
8
|
+
json_repair-0.32.0.dist-info/LICENSE,sha256=wrjQo8MhNrNCicXtMe3MHmS-fx8AmQk1ue8AQwiiFV8,1076
|
9
|
+
json_repair-0.32.0.dist-info/METADATA,sha256=Sbk5aG5bviThWyIXG4inuXPoJ9b0XNrAR1Hp-RVxdvY,11794
|
10
|
+
json_repair-0.32.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
11
|
+
json_repair-0.32.0.dist-info/entry_points.txt,sha256=SNfge3zPSP-ASqriYU9r3NAPaXdseYr7ciPMKdV2uSw,57
|
12
|
+
json_repair-0.32.0.dist-info/top_level.txt,sha256=7-VZwZN2CgB_n0NlSLk-rEUFh8ug21lESbsblOYuZqw,12
|
13
|
+
json_repair-0.32.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|