1. 程式人生 > >使用Python處理json字串中的非法雙引號

使用Python處理json字串中的非法雙引號

工作中資料清洗時遇到以下情況:

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()便不會報錯了