一、定义
JSON,用于数据交换的文本格式(解析之后得到一个相应的对象),是一种数据格式
如:
{
"name":"wangxiaoqin",
"age":3
}
// {name: "wangxiaoqin", age: 3}
二、Json对值得类型和格式有严格规定
- 复合类型的值:数组、对象(不能是函数、正则表达式对象、日期对象)
- 简单类型的值:字符串、数值(必须以十进制表示)、布尔值和
null
(不能使用NaN
,Infinity
,-Infinity
和undefined
) - 字符串必须使用双引号(不能使用单引号)
- 对象的键名必须放在双引号里面。
- 数组或对象最后一个成员的后面不能加逗号
1、合格的 JSON 值
注:合格的 JSON 值:空数组[ ]
、 空对象{}
、null
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"} ]
2、不合格的JSON值
{name: "张三", 'age': 32 } // 属性名必须使用双引号
[32, 64, 128, 0xFFF] //不能使用十六进制值 0xFFF
{"name": "张三", "age": undefined} //不能使用undefined
{"name": "张三",
"birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
"getName": function() {
return this.name;
}
} //不能使用函数和日期对象
三、如何JS中处理JSON格式数据
1、把一个符合JSON格式规则的字符串解析成对象——JSON.parse()
var str = '{"name":"wangxiaoqin","age":3}'
JSON.parse(str)
//{name: "wangxiaoqin", age: 3}
/*调用单独属性*/
JSON.parse(str).age
// 3
JSON.parse(str).name
//"wangxiaoqin"
如图:
image
题外话:
深拷贝的另一种写法
利用JSON.parse()
实现一个简单数据的深拷贝 ,对象转字符串
var obj = {
name: 'hunger',
age: 3,
friends: ['aa', 'bb', 'cc']
}//定义一个对象
/* 将对象解析成字符串 */
JSON.stringify(obj)
//"{"name":"hunger","age":3,"friends":["aa","bb","cc"]}"
/* 再把字符串解析成对象 */
JSON.parse(JSON.stringify(obj))
//{name: "hunger", age: 3, friends: Array(3)}
//深拷贝:相当于重组对象,外观一样,内核已变
2、把一个JS对象解析成字符串——JSON.stringify()
obj = {a:1, b:2}
//{a: 1, b: 2}
JSON.stringify(obj)
//"{"a":1,"b":2}"
/* 解析为字符串值符合JSON格式 */
如图:
image
四、Javascript对象和JSON的关系
- javascript对象的字面量写法只是长的像 JSON 格式数据(JS属于模仿JSON),二者属于不同的范畴
- JavaScript 对象中很多类型(函数、正则、
Date
) ,JSON 格式的规范并不支持 - JavaScript 对象的字面量写法更宽松(如可不为属性名引号)
网友评论