Помогает ли это для дополнительного экранирования ...
Дамп к JSON добавляет дополнительные двойные кавычки и экранирование кавычек
Это не может быть идеально (я чувствую, что это довольно грубо с использованием двух шаблонов регулярных выражений), но для данного JSON из ...
{"WordText":"\"*EET", "Left":88.0,"Top":153.0,"Height":7.0,"Width":21.0},
{"WordText":""4512","Left":1.0,"Top":94.0,"Height":7.0,"Width":24.0},
{"WordText":"IV"L","Left":98.0,"Top":135.0,"Height":6.0,"Width":13.0}
Этот код ...
import pandas as pd
import re
pattern1 = re.compile(r'(?i)(\"\"|\"\\\")') # replace with: "
pattern2 = re.compile(r'(?i)(\w)(\")(\w)') # replace with: \1\3
data = '''
[{"WordText":"\"*EET", "Left":88.0,"Top":153.0,"Height":7.0,"Width":21.0},
{"WordText":""4512","Left":1.0,"Top":94.0,"Height":7.0,"Width":24.0},
{"WordText":"IV"L","Left":98.0,"Top":135.0,"Height":6.0,"Width":13.0}]
'''
data = pattern1.sub(r'"', data)
data = pattern2.sub(r'\1\3', data)
#load it into a pandas dataframe just to prove it is valid
df = pd.read_json(data)
print(df)
Выходы .. .
WordText Left Top Height Width
0 *EET 88 153 7 21
1 4512 1 94 7 24
2 IVL 98 135 6 13
Может быть, посмотрите на эту дополнительную экранирующую ссылку в начале ответа и посмотрите, есть ли там проблема. Это также может быть полезно ...
как удалить заднюю sla sh из JSON файла
**
ОБНОВЛЕНИЕ :
**
Вот новый код с примером поврежденного JSON, исправляемого двумя шаблонами регулярных выражений. У меня нет вашего JSON, но он показывает, что регулярное выражение должно помочь в коррупции, описанной до сих пор. Я прокомментировал код, чтобы помочь объяснить это
Код:
import pandas as pd
import re
# compile a pattern to match "\"text" OR ""text" which needs replacing with a single doublequote
pattern1 = re.compile(r'(?i)(\"\"|\"\\\")')
# compile a second pattern to match "te"xt" which needs to be replacing with nothing/blank/just remove
pattern2 = re.compile(r'(?i)\b(\")\b')
# if this was the input (good_data) it would work without any clean up
good_data = '''
{"Sub_ID":["1","2","3","4","5","6","7","8" ],
"Name":["Erik", "Daniel", "Michael", "Sven",
"Gary", "Carol","Lisa", "Elisabeth" ],
"Salary":["723.3", "515.2", "621", "731",
"844.15","558", "642.8", "732.5" ],
"StartDate":[ "1/1/2011", "7/23/2013", "12/15/2011",
"6/11/2013", "3/27/2011","5/21/2012",
"7/30/2013", "6/17/2014"],
"Department":[ "IT", "Management", "IT", "HR",
"Finance", "IT", "Management", "IT"],
"Sex":[ "M", "M", "M",
"M", "M", "F", "F", "F"]}
'''
# copied good_data and corrupted it with "\"Erik", ""Gary", and "Mana"gement"
bad_data = '''
{"Sub_ID":["1","2","3","4","5","6","7","8" ],
"Name":["\"Erik", "Daniel", "Michael", "Sven",
""Gary", "Carol","Lisa", "Elisabeth" ],
"Salary":["723.3", "515.2", "621", "731",
"844.15","558", "642.8", "732.5" ],
"StartDate":[ "1/1/2011", "7/23/2013", "12/15/2011",
"6/11/2013", "3/27/2011","5/21/2012",
"7/30/2013", "6/17/2014"],
"Department":[ "IT", "Management", "IT", "HR",
"Finance", "IT", "Mana"gement", "IT"],
"Sex":[ "M", "M", "M",
"M", "M", "F", "F", "F"]}
'''
# run the bad_data through the find and replace for the two patterns
# first one finds such mistakes as "\"text" OR ""text" and replaces with a single doublequote
bad_data = pattern1.sub(r'"', bad_data)
# second pattern finds a doublequote on its own in the middle of a word like "te"xt" and removes it
bad_data = pattern2.sub(r'', bad_data)
# read the fixed bad_data into a pandas dataframe to check it's valid
df = pd.read_json(bad_data)
# print out the df
print(df)
Выходы:
Sub_ID Name Salary StartDate Department Sex
0 1 Erik 723.30 1/1/2011 IT M
1 2 Daniel 515.20 7/23/2013 Management M
2 3 Michael 621.00 12/15/2011 IT M
3 4 Sven 731.00 6/11/2013 HR M
4 5 Gary 844.15 3/27/2011 Finance M
5 6 Carol 558.00 5/21/2012 IT F
6 7 Lisa 642.80 7/30/2013 Management F
7 8 Elisabeth 732.50 6/17/2014 IT F
Если вы закомментируете регулярное выражение, заменяет строки ...
bad_data = pattern1.sub(r'"', bad_data)
bad_data = pattern2.sub(r'', bad_data)
... и получите pandas для чтения JSON ошибок с ...
ValueError: Unexpected character found when decoding array value (2)
... что ожидается.