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

当Python标准库json无法解析不带双引号键的JSON数据时,可以采用第三方库demjson进行解码,或者使用自定义函数进行处理。自定义函数能将无引号的JSON字符串转化为带引号的字典对象,方便后续操作。正则表达式也是解决此类问题的一种方式,但需注意排除时间字符串中可能存在的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在解析网页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字符串用函数标准化后发现里面的属性名称都带上了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值