JSON 是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
语法
JSON的语法可以表示以下三种类型的值
1、简单值
使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null,但JSON不支持JavaScript中的特殊值undifined。比如:
5
"hello world"
2、对象
对象作为一种复杂的数据类型,表示一组有序的键值对。每个键值对中的值可以是简单值也可以是复杂的数据类型。
var obj = {
name:'234',
'value':234,
"is":true
}
{
"name":'234',
"age":23
}
如上分别是js对象和JSON对象。需要注意的是JSON对象的键必须是字符串类型的,而js对象就没有这种要求,比较自由灵活
3、数组
数组也是一种复杂的数据类型,表示一组有序的值的列表。
["hi",23,true]
[{"name":'33',"describe":{"age":23}}]
JSON数组可以是简单的值的数据,也可以是复杂数据集合。
解析与序列化
序列化
JSON的解析与序列化主要就是JSON.stringify()和JSON.parse()方法。前者是将JSON对象序列化成字符串。常见用法:
JSON.stringify({name:'234',"age":23})
"{"name":"234","age":23}"
此外stringify方法还可以接收2个参数。
JSON.stringify({name:'234',"age":23},['name'])
"{"name":"234"}"//第二个参数是数组表示只序列化数组中的键
var data = {
name:"niuzai",
info:{
age:18,
sex:"male"
}
};
JSON.stringify(data, function(key, val){ //过滤函数
console.log("key is %s", key);
console.log("val is %s", typeof(val));
return val;
});
key is
val is object
key is name
val is string
key is info
val is object
key is age
val is number
key is sex
val is string
var data = {name:'234',age:11}
undefined
JSON.stringify(data)
"{"name":"234","age":11}"
JSON.stringify(data,null,4) //第三个参数用于控制结果中的缩进和空白符
"{
"name": "234",
"age": 11
}"
解析
解析主要是将JSON字符串解析为JSON对象。用JSON.parse()方法
继续使用上文的例子
var data = {name:'234',age:11}
var b = JSON.stringify(data)
JSON.parse(b)
{name: "234", age: 11}
可以看到经过解析后的值类型还是和原来的一致。
我们通常可以使用JSON.parse()来判定一个字符串是不是JSON字符串,通过try catch。如果有异常则此字符串非JSON字符串。