json是我们在实际工作中经常用到的解析工具,它易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。那json的键值不带引号怎么处理?下面来我们就来给大家讲解一下。
在解析网页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的键值分隔符):
json格式如何获取键值对?
使用java获取json的键值对:
使用iterator遍历
import java.util.Iterator; import net.sf.json.JSONObject; public static void main(String[] args) { String param = "{bindid:'123',taskId:'321',bt:'发文收文',rq:'2017-11-12'}"; JSONObject obj = JSONObject.fromObject(param); // 第一种:使用while遍历方式 Iteratoriterator = obj.keys(); while (iterator.hasNext()) { String key = iterator.next(); String value = obj.getString(key); System.out.println(key + "===" + value); } // 第二种:使用for循环遍历 for (Iteratoriterator = obj.keys(); iterator.hasNext();) { String key = iterator.next(); String value = obj.getString(key); System.out.println(key + "===" + value); } }
除了以上的方法之外,我们还可以使用js获取json的键值对哦,下次我们再给大家讲解这个方法吧!最后大家如果想要了解更多json工具教程知识,敬请关注奇Q工具网。
推荐阅读: