json-repair 0.29.5__py3-none-any.whl → 0.29.6__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -308,9 +308,6 @@ class JSONParser:
308
308
  rstring_delimiter_missing = True
309
309
  # check if this is a case in which the closing comma is NOT missing instead
310
310
  i = self.skip_to_character(character=rstring_delimiter, idx=1)
311
- # If the rstring_delimeter is escaped then it's not what we are looking for
312
- while self.get_char_at(i - 1) == "\\":
313
- i = self.skip_to_character(character=rstring_delimiter, idx=i + 1)
314
311
  next_c = self.get_char_at(i)
315
312
  if next_c:
316
313
  i += 1
@@ -319,6 +316,15 @@ class JSONParser:
319
316
  next_c = self.get_char_at(i)
320
317
  if next_c and next_c in [",", "}"]:
321
318
  rstring_delimiter_missing = False
319
+ elif char == ",":
320
+ # We couldn't find any rstring_delimeter before the end of the string
321
+ # check if this is the last string of an object and therefore we can keep going
322
+ # make an exception if this is the last char before the closing brace
323
+ i = self.skip_to_character(character="}", idx=1)
324
+ if i > 1:
325
+ # Ok it's not right after the comma
326
+ # Let's ignore
327
+ rstring_delimiter_missing = False
322
328
  if rstring_delimiter_missing:
323
329
  self.log(
324
330
  "While parsing a string missing the left delimiter in object value context, we found a , or } and we couldn't determine that a right delimiter was present. Stopping here",
@@ -414,11 +420,6 @@ class JSONParser:
414
420
  ):
415
421
  i += 1
416
422
  i = self.skip_to_character(character=rstring_delimiter, idx=i)
417
- # If the rstring_delimeter is escaped then it's not what we are looking for
418
- while self.get_char_at(i - 1) == "\\":
419
- i = self.skip_to_character(
420
- character=rstring_delimiter, idx=i + 1
421
- )
422
423
  next_c = self.get_char_at(i)
423
424
  # Ok now I found a delimiter, let's skip whitespaces and see if next we find a }
424
425
  i += 1
@@ -432,7 +433,9 @@ class JSONParser:
432
433
  string_acc += str(char)
433
434
  self.index += 1
434
435
  char = self.get_char_at()
435
- elif next_c == rstring_delimiter:
436
+ elif (
437
+ next_c == rstring_delimiter and self.get_char_at(i - 1) != "\\"
438
+ ):
436
439
  if self.context.current == ContextValues.OBJECT_VALUE:
437
440
  # But this might not be it! This could be just a missing comma
438
441
  # We found a delimiter and we need to check if this is a key
@@ -441,19 +444,13 @@ class JSONParser:
441
444
  i = self.skip_to_character(
442
445
  character=rstring_delimiter, idx=i
443
446
  )
444
- # If the rstring_delimeter is escaped then it's not what we are looking for
445
- while self.get_char_at(i - 1) == "\\":
446
- i = self.skip_to_character(
447
- character=rstring_delimiter, idx=i + 1
448
- )
449
447
  i += 1
450
448
  next_c = self.get_char_at(i)
451
449
  while next_c and next_c != ":":
452
- if next_c in [
453
- lstring_delimiter,
454
- rstring_delimiter,
455
- ",",
456
- ]:
450
+ if next_c == "," or (
451
+ next_c == rstring_delimiter
452
+ and self.get_char_at(i - 1) != "\\"
453
+ ):
457
454
  break
458
455
  i += 1
459
456
  next_c = self.get_char_at(i)
@@ -582,6 +579,9 @@ class JSONParser:
582
579
  char = self.json_str[self.index + idx]
583
580
  except IndexError:
584
581
  return idx
582
+ if self.index + idx > 0 and self.json_str[self.index + idx - 1] == "\\":
583
+ # Ah this is an escaped character, try again
584
+ return self.skip_to_character(character=character, idx=idx + 1)
585
585
  return idx
586
586
 
587
587
  def _log(self, text: str) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: json_repair
3
- Version: 0.29.5
3
+ Version: 0.29.6
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
@@ -1,13 +1,13 @@
1
1
  json_repair/__init__.py,sha256=IIzSm1DsCRrr8seF3UeMZXwxcq-tE3j-8d1WBxvEJvE,178
2
2
  json_repair/__main__.py,sha256=EsJb-y89uZEvGQQg1GdIDWzfDwfOMvVekKEtdguQXCM,67
3
3
  json_repair/json_context.py,sha256=DdJu3DJR-ANvr8KrWfJqdtOE3uI6_B0VQidKvE3PjJA,1080
4
- json_repair/json_parser.py,sha256=jwpaUQlWXIr1LpgJa0K-J6Mb5YDNypzdmdzRr8t9HyQ,26419
4
+ json_repair/json_parser.py,sha256=6d8R2m29meyFz2_gxvF5olYs1VytAQTV-rDqIYzwjnE,26385
5
5
  json_repair/json_repair.py,sha256=GTg3OAXRbAJAHWs8oiQDqUHh4h6qKDVvWPXcrqafzLY,6100
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.29.5.dist-info/LICENSE,sha256=wrjQo8MhNrNCicXtMe3MHmS-fx8AmQk1ue8AQwiiFV8,1076
9
- json_repair-0.29.5.dist-info/METADATA,sha256=hN659VLMQsy-hceD0ZBJnBhCKnQXi3NC_4JS0vttGYc,10686
10
- json_repair-0.29.5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
11
- json_repair-0.29.5.dist-info/entry_points.txt,sha256=SNfge3zPSP-ASqriYU9r3NAPaXdseYr7ciPMKdV2uSw,57
12
- json_repair-0.29.5.dist-info/top_level.txt,sha256=7-VZwZN2CgB_n0NlSLk-rEUFh8ug21lESbsblOYuZqw,12
13
- json_repair-0.29.5.dist-info/RECORD,,
8
+ json_repair-0.29.6.dist-info/LICENSE,sha256=wrjQo8MhNrNCicXtMe3MHmS-fx8AmQk1ue8AQwiiFV8,1076
9
+ json_repair-0.29.6.dist-info/METADATA,sha256=Us1Nn8o5yaJHnssGY5t7X1yfii0NRCvlSjBH9TyANnw,10686
10
+ json_repair-0.29.6.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
11
+ json_repair-0.29.6.dist-info/entry_points.txt,sha256=SNfge3zPSP-ASqriYU9r3NAPaXdseYr7ciPMKdV2uSw,57
12
+ json_repair-0.29.6.dist-info/top_level.txt,sha256=7-VZwZN2CgB_n0NlSLk-rEUFh8ug21lESbsblOYuZqw,12
13
+ json_repair-0.29.6.dist-info/RECORD,,