使用Python處理json字串中的非法雙引號
阿新 • • 發佈:2018-11-05
工作中資料清洗時遇到以下情況:
a = '{"地區": "湖南", "描述": "精通軟體開發、"資料探勘"和分散式"}'
由於讀取出的json字串中包含有非法雙引號,在使用json.loads()
處理的時候報錯
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 29 (char 28)
寫了大半個小時的正則都無法解決
後來使用如下方法解決了,一併把json字串中的換行符、分隔符和雙引號都轉義了
def deal_json_invaild(data):
data = data.replace("\n" , "\\n").replace("\r", "\\r").replace("\n\r", "\\n\\r") \
.replace("\r\n", "\\r\\n") \
.replace("\t", "\\t")
data = data.replace('": "', '&&testPassword&&')\
.replace('", "', "$$testPassword$$")\
.replace('{"', "@@[email protected]@")\
.replace('"}' , "**testPassword**")
print(data)
data = data.replace('"', r'\"')\
.replace('&&testPassword&&', '": "').replace('$$testPassword$$', '", "').replace('@@[email protected]@', '{"').replace('**testPassword**', '"}')
print(data)
return data
測試如下:
a = deal_json_invaild(a )
json_data = json.loads(a)
> {"地區": "湖南", "描述": "精通軟體開發、\"資料探勘\"和分散式"}
此時轉使用json.loads()
便不會報錯了