JSON的key为什么要用引号?JSON的key能是数字吗?

JSON是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成,是开发中特别常用的数据格式,那JSON的key为什么要用引号?下面来我们就来给大家讲解一下。

根据官方定义可以看出,键值对pair一定是string : value的格式。

key:必须是string,根据string的定义,所以必须打双引号。

value:可以是string,number,object,array,true,false,null这些东西里面只有string是带双引号的,其他都不带。

至于为什么这么定义?从使用上说,你如果把其他类型做为key,在做解析的时候肯定会带来不便。

从逻辑上说,key的作用就是为value取一个特定的名称,名称当然是用字符串来表示。

JSON的key能是数字吗?

json是javascript的子集,在javascript中,只能使用字符串作为对象的key,看一下示例:

let a = {1: 1, true: true};
console.log(a[1]); // 1
console.log(a["1"]); // 1
console.log(Object.keys(a)); // ["1", "true"]
console.log(JSON.stringify(a)); // "{"1":1,"true":true}"

第4行代码能够直接说明对象的key被转换为了字符串,而第5行转化为json中,key也都被转化为字符串。

json是跨语言的,我们来看下Java版本:

public class JsonTest
{
    public static void main(String[] args)
    {
        Mapmap = new HashMap < > ();
        map.put(1, "a");
        map.put(2, "b");
        map.put(true, "c");
        String json = JSON.toJSONString(map);
        System.out.println(json); // {1:"a",2:"b",true:"c"}
        // 使用fastjson
        JSONObject jsonObject1 = JSONObject.parseObject(json);
        System.out.println(jsonObject1.keySet()); // [1, 2, true], keySet的类型是String
        System.out.println(jsonObject1.get(1)); // "a"
        System.out.println(jsonObject1.get("1")); // null
        // 官方json
        org.json.JSONObject jsonObject2 = new org.json.JSONObject(json);
        System.out.println(jsonObject2.keySet()); // [1, 2, true], keySet的类型是String
        System.out.println(jsonObject2.get("1")); // "a"
        System.out.println(jsonObject2.get(1)); // 编译错误,get方法中的key只能是String
       
    }
}

使用fastjson和官方的json库分别对json进行了实验:

序列化

官方的json和fastjson在构建json时,添加元素时,key都只能是字符串,上述demo中使用了map获取到key为数值的 “json结构”。

反序列化

demo中可以看出,fastjson的提供了获取非字符串key的get方法,官方json库只能获取字符串key,其中jsonObject2中的key已经被转换为字符串,参见下图:

JSON的key为什么要用引号?JSON的key能是数字吗?.jpg

从文章中我们可以看出,标准的Json结构的key必须是string类型的,在使用一些第三方的库时,对key时其他类型的支持程度并不相同,建议后续使用json时,key的类型设定为string类型,减少多系统协作时的问题。

key必须是string,根据string的定义,所以必须打双引号,这也是JSON的key要用双引号的原因哦!最后大家如果想要了解更多json工具教程知识,敬请关注奇Q工具网。

推荐阅读:

java工程师必须要掌握的技术有哪些?如何做好java工程师?

qtjson解析发生错误怎么办?json解析方法有哪些?

java面试多少分钟?java常见面试题分享