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)

搞定

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐