处理json中不带双引号的key的问题

在解析网页json数据的时候,我发现python标准库json模块无法加载数据。如下面数据:

import json
s='{symbol:"sh600069",code:"600069",name:"银鸽投资",trade:"3.160",pricechange:"-0.030",changepercent:"-0.940",buy:"3.160",sell:"3.170",settlement:"3.190",open:"3.190",high:"3.210",low:"3.140",volume:3905810,amount:12388386,ticktime:"15:00:00",per:79,pb:2.416,mktcap:513131.494704,nmc:513131.494704,turnoverratio:0.24053}'
js=json.loads(s)

结果报错,提示预期的属性名称应该在双引号里,python无法识别这种不带双引号的json的数据:

那么怎么解决呢?第一种方法是使用第三方库demjson.这个安装后直接decode数据源就行。

另一种就是自己写个自定义函数处理下,今天找到一个处理这种问题的自定义函数了。

 

def jsonfy(s:str)->object:
    #此函数将不带双引号的json的key标准化
    obj = eval(s, type('js', (dict,), dict(__getitem__=lambda s, n: n))())
    return obj

 对字json字符串用函数标准化后发现里面的属性名称都带上了引号,而且已经转化为了字典对象了。可以直接进行操作获取数了。

当然正则处理一下也是没问题的。主要就是要排除时间字符串的影响(时间里面刚好带了:也是json的键值分隔符):