JSON JavaScript Object Notation是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。
JSON现在广泛用于前后台数据交互,是现在最流行的交互数据格式。

1、简单的JSON对象

//键值名带引号
    var person = {
        "name": "ys",
        "age": 12
    };
    console.log(typeof person); //Object
    //键值名不带引号
    var person = {
        name: "ys",
        age: 12
    };
    console.log(typeof person);//Object

既然这么相像,这也就奠定了JSON在数据交互中的地位,是不是可以互相转换,从而用JavaScript的方法去调用他,答案是肯定的,下文有详解。

二者的区别如下:

  • 对象直接量有声明变量(JSON中没有变量)
  • 对象直接量是JavaScript语句,所以末尾有“;”
  • 对象直接量键值名引号可有可无,而JSON中则必须带引号

2、复杂的JSON对象(JSON数组)

//①
    ["ys", 12]
//②
    [
        {
            "name": "ys",
            "age": 12
        },
        {
            "name": "hh",
            "age": 13
        }
    ]
//③
    [
        {
            "name": "ys",
            "age": 12,
            "like": ["eat", "drink"]
        },
        {
            "name": "hh",
            "age": 13,
            "like": ["language", "write"]
        }
    ]
//④
    [
        {
            "name": "ys",
            "age": 12,
            "like": {
                "eat": "banana",
                "drink": "water"
            }
        },
        {
            "name": "hh",
            "age": 13,
            "like": {
                "language": "Chinese",
                "write": "novel"
            }
        }
    ]

JSON数组数据层层加深,因此可以表示复杂的数据

JSON字符串和JSON对象

java怎么让json的键没有双引号 json的键值不带引号_json

java怎么让json的键没有双引号 json的键值不带引号_Text_02

        类型变换:Object -> String

 

      二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

java怎么让json的键没有双引号 json的键值不带引号_json_03

类型变化:String -> Object

JSON序列化

1、json数据过滤 
有些时候我们只需要json数据中的某几条作为结果,这个时候我们可以对json数据进行过滤

stringify()可以接受第二个参数,【过滤条件】,返回过滤后的json对象

①数组条件过滤,如[“name”, “age”]

var myMes = {
        "name": "ys",
        "age": 12,
        "like": "drink",
        "nationality": "China"
    };
    /*实现过滤,只留下name和age*/
    var jsonText = JSON.stringify(myMes, ["name", "age"]);
    console.log(jsonText);         //{"name": "ys", "age": 12}

②函数条件过滤 
当使用函数条件过滤时候,我们就可以按照我们需求去做出处理了,如:

var myMes= {
        "name": "ys",
        "age": 12,
        "like": "drink",
        "nationality": "China"
    };
    var jsonText = JSON.stringify(myMes, function(key, value){
        switch(key){
            case "name": 
                return "名字改变了";
            default: 
                return value;
        }
    }, 4);
    console.log(jsonText);

运行结果如图: 

java怎么让json的键没有双引号 json的键值不带引号_Text_04

对于第三个参数,上述代码中4的用法,下文有讲,关于这个函数过滤function(key, value){},key为键值对名,value存储值,我追踪了一下value值,如下图: 

java怎么让json的键没有双引号 json的键值不带引号_Text_05

 

为什么循环次数为【键值+1】,因为第一次循环的时候,key=“”

2、json字符串格式序列化 
也就是用到stringify()的第三个参数,如例子:

var myMes= {
        "name": "ys",
        "age": 12,
        "like": "drink",
        "nationality": "China"
    };
    var jsonText = JSON.stringify(myMes, ["name", "age"], 4);
    console.log(jsonText);//{"name": "ys", "age": 12}

 

如上代码,我们给stringify()设置了第三个参数,【缩进控制】,效果图如下: 

java怎么让json的键没有双引号 json的键值不带引号_JSON_06

 

努力没有早晚,耕耘就有收获