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对象
类型变换:Object -> String
二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。
类型变化: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);
运行结果如图:
对于第三个参数,上述代码中4的用法,下文有讲,关于这个函数过滤function(key, value){},key为键值对名,value存储值,我追踪了一下value值,如下图:
为什么循环次数为【键值+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()设置了第三个参数,【缩进控制】,效果图如下:
努力没有早晚,耕耘就有收获