1. JSON历史/作用/应用
在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。
-
JSON的全称是JavaScript Object Notation(JavaScript对象符号):
-
JSON是由Douglas Crockford构想和设计的一种轻量级资料交换格式,算是JavaScript的一个子集
-
虽然JSON被提出来的时候是主要应用JavaScript中,但是目前已经独立于编程语言,可以在各个编程语言中使用
-
很多编程语言都实现了将JSON转成对应模型的方式
-
-
目前JSON被使用的场景也越来越多:
-
网络数据的传输JSON数据
-
项目的某些配置文件
-
非关系型数据库(NoSQL)将json作为存储格式
-
2. JSON的基本语法
-
JSON的顶层支持三种类型的值:
-
简单值:数字(Number)、字符串(String,不支持单引号)、布尔类型(Boolean)、null类型
-
对象值:由key、value组成,key是字符串类型,并且必须添加双引号,值可以是简单值、对象值、数组值
-
数组值:数组的值可以是简单值、对象值、数组值
-
-
注意:不能使用注释,只能使用双引号,最后一个属性不可有逗号
{ "name": "lilei", "age": 18, "friend": { "name": "hanmeimei", "age": 17 } }
3. JSON的序列化和反序列化
-
序列化:将JavaScript中的复杂类型转化成JSON格式的字符串
-
反序列化:将JSON格式的字符串转化成对象
4. stringify和parse方法
-
在ES5中引用了JSON全局对象,该对象有两个常用的方法:
-
stringify方法:将JavaScript类型转成对应的JSON字符串
-
parse方法:解析JSON字符串,转回对应的JavaScript类型
var obj = { name: "lilei", age: 18, friend: { name: "hanmeimei" } } console.log(obj.name, obj.age) // 1.将obj对象进行序列化 var objJSONString = JSON.stringify(obj) console.log(objJSONString) // 2.将对象存储到localStorage localStorage.setItem("info", objJSONString) var item = localStorage.getItem("info") console.log(item, typeof item) // string // 3.将字符串转回到对象(反序列化) var newObj = JSON.parse(item) console.log(newObj) -
-
JSON应用
-
能够实现深拷贝(循环引用除外)
-
判断对象是否为空
var data = {} var b = (JSON.stringify(data) == "{}") alert(b) //true
-
-
JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串:
-
如果指定了一个 replacer 函数,则可以选择性地替换值
-
如果指定的 replacer 是数组,则可选择性地仅包含数组指定的属性
var obj = { name: "lilei", age: 18, friend: { name: "hanmeimei" }, toJSON: function() { return "123" } } // 1.replacer参数 // var objJSONString = JSON.stringify(obj, function(key, value) { // if (key === "name") { // return "kobe" // } // return value // }, "") // console.log(objJSONString) // 2.space参数 // var objJSONString = JSON.stringify(obj, null, 4) // console.log(objJSONString) // 3.如果对象本身有显示toJSON方法, 那么直接调用toJSON方法 var objJSONString = JSON.stringify(obj) console.log(objJSONString) // "123" var newObj = JSON.parse(objJSONString, function(key, value) { if (key === "age") { return value + 2 } return value }) console.log(newObj) // age会变成20 -