json的键值不带引号怎么处理?json格式如何获取键值对?

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的数据:

json的键值不带引号怎么处理?json格式如何获取键值对?.png

那么怎么解决呢?第一种方法是使用第三方库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的键值分隔符):

1.png

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工具网。

推荐阅读:

Java如何设计五子棋游戏?java程序设计五子棋小游戏

java常见面试题有哪些?java常见面试题

java泛型作用是什么?java泛型如何使用?