json.load()处理带有注释的json字符串数据
jsonStr = '{"statusCode": 200,//成功返回值200\n"message": "已成功获取数据"}'
有如下报错:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 20 (char 19)
提示从第19个char开始出错,即不能处理注释部分
要json解析带有注释的字符串,可以正则匹配注释的部分,然后强转成json格式,代码如下:
def parse_jsonStr_to_json(self,json_raw):
try:
# 处理// ... /n 格式非json内容
json_str1 = re.sub(re.compile('(//[\\s\\S]*?\n)'), '', json_raw)
# 处理/*** ... */ 格式非json内容
json_str2 = re.sub(re.compile('(/\*\*\*[\\s\\S]*?/)'), '', json_str1)
# 返回json格式的数据
return json.loads(json_str2)
except Exception as e:
traceback.print_exc()
可以处理格式如下的注释
// ....
/*
....
*/
执行起来妥妥的并无问题,但是BUG总是如期而至,形如如下格式时就蒙圈了
"url": "http://127.0.0.1:5001" \n
直接把 //127.0.0.1:5001" \n
给处理了,那咋整,可以再实现逻辑处理这个异常,但是node.js中有专门去除注释的第三方包 strip-json-comments,发现python中json5完美可以解决这个问题,相关文档https://pypi.org/project/json5/0.1.5/#description
其实使用起来特简单
首先
pip install json5
接着
jsonStr = '{"statusCode": 200,//成功返回值200\n"message": "已成功获取http://www.baidu.com\n"}'
import json5
json5.loads(jsonStr)
搞定