如何修复无效JSON格式字符串并转换为Python字典?
解决方法
一、修正为有效JSON格式
原字符串的核心问题是外层多了一对包裹的双引号,导致JSON解析器将整个内容识别为单个字符串而非对象。另外SOAPAction中的域名包含连续两个点(..),这在JSON语法中是允许的,若需实际可用域名可自行修改为单一点。
修正后的有效JSON如下:
{ "SOAPAction": "http://www.my-website..uk/path/To/service/v1/serviceAndLedger", "ID": "1sceas2-61ae-379dd-a9cd-c813fb07u8inb", "info": { "GMT": "16/Nov/2022:12:13:46 +0000", "client": "10.177.147.71:42987", "frontend": "path/to_my_ip/12.189.66.213:8804", "request": "POST /path/service HTTP/1.1", "body": "/path/of/downloaded/file.xml", "response": "-" } }
注:原字符串中body字段的\/是转义斜杠,修正时可直接转为正常斜杠,不影响解析。
二、转换为Python字典
使用json.loads()即可直接解析修正后的JSON字符串,示例代码:
import json # 修正后的JSON字符串 valid_json_str = ''' { "SOAPAction": "http://www.my-website..uk/path/To/service/v1/serviceAndLedger", "ID": "1sceas2-61ae-379dd-a9cd-c813fb07u8inb", "info": { "GMT": "16/Nov/2022:12:13:46 +0000", "client": "10.177.147.71:42987", "frontend": "path/to_my_ip/12.189.66.213:8804", "request": "POST /path/service HTTP/1.1", "body": "/path/of/downloaded/file.xml", "response": "-" } } ''' # 转换为字典 result_dict = json.loads(valid_json_str) print(type(result_dict)) # 输出: <class 'dict'> print(result_dict)
如果是处理原始带转义的字符串,直接解析即可(Python会自动处理字符串内的转义):
import json original_str = "{\"SOAPAction\":\"http://www.my-website..uk/path/To/service/v1/serviceAndLedger\",\"ID\":\"1sceas2-61ae-379dd-a9cd-c813fb07u8inb\", \"info\": {\"GMT\":\"16/Nov/2022:12:13:46 +0000\", \"client\":\"10.177.147.71:42987\", \"frontend\":\"path/to_my_ip/12.189.66.213:8804\", \"request\":\"POST /path/service HTTP/1.1\", \"body\":\"\\/path\\/of\\/downloaded\\/file.xml\", \"response\":\"-\"}}" # 直接解析 result_dict = json.loads(original_str) print(type(result_dict))
注:如果原始字符串开头结尾带有额外双引号,需先用original_str.strip('"')去除后再解析。
内容的提问来源于stack exchange,提问作者blackfyr3
相关产品推荐
相关产品推荐

