python - 使用json.loads,key不带引号,且value中可能含有“:”,如何最好地处理?

 也许吧但不是2007029SES 发布于 2022-10-29 22:39

例如:

'''{
    colorSize: [{
        "Color": "超窄边IPS",
        "SkuId": 1365289,
        "Size": "27英寸"
    }, {
        "Color": "21:9超宽IPS曲面",
        "SkuId": 1742140,
        "Size": "29英寸"
    }, {
        "Color": "17英寸(TN,5:4方屏)",
        "SkuId": 1032147,
        "Size": "17英寸"
    }],
    warestatus: 1,
    shangjiazizhi: false
}'''

为了给key加双引号,必需先选中之
因为内容带有“:”,

  1. (\w+):,误处理"21:9超宽IPS曲面"

  2. [{,]\s*(\w+):,误处理"17英寸(TN,5:4方屏)"

有什么比较好的处理方法呢?

4 个回答
  • 自己解决了,简单说一下:
    最关键是这些丧心病狂的:号必然出现在成对的"

    因为双引号总是成对出现且不交叉
    用 re.sub 把成对的双引号过滤,然后滤出结果交给函数处理:将双引号中间的冒号替换成特殊字符,为了描述方便我把这个字符称为

    再用之前带冒号的正则处理替换后不带内容冒号的结果

    那么新问题来了,key加好双引号之后,假如我要把 替换回:,那么 选择什么特殊字符最妥呢?

    2022-10-31 19:37 回答
  • 手机版不能看到完整标题,能回复一下吗
    手机版还不能回复评论,恼火
    更新一下,前面匹配一个空格

    \s([^"]+):

    或者前面匹配一个行首

    ^([^"]+):
    2022-10-31 19:38 回答
  • 两种方案
    一种像@raidou说的使用demjson
    一种使用pyexecjs
    上代码

    import execjs
    import demjson
    
    str = '''
    {
        colorSize: [{
            "Color": "超窄边IPS",
            "SkuId": 1365289,
            "Size": "27英寸"
        }, {
            "Color": "21:9超宽IPS曲面",
            "SkuId": 1742140,
            "Size": "29英寸"
        }, {
            "Color": "17英寸(TN,5:4方屏)",
            "SkuId": 1032147,
            "Size": "17英寸"
        }],
        warestatus: 1,
        shangjiazizhi: false
    }
    '''
    print demjson.decode(str)
    print execjs.eval(str)
    2022-10-31 19:39 回答
  • 可以使用demjson https://github.com/dmeranda/d...

    2022-10-31 19:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有