JSON对象的stringify和parse方法使用
- JSON 格式
- JSON 对象
- JSON.stringify()
- 1.JSON.stringify(value)
- 2.JSON.stringify(value,replace)
- 3.JSON.stringify(value,replace,space)
- 4.注意的点
- JSON.parse()
JSON 格式
JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。
相比 XML 格式,JSON 格式有两个显著的优点:书写简单,一目了然;符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON 迅速被接受,已经成为各大网站交换数据的标准格式,并被写入标准。
每个 JSON 对象就是一个值,可能是一个数组或对象,也可能是一个原始类型的值。总之,只能是一个值,不能是两个或更多的值。
JSON对值的类型和格式有很严格的要求:
1.复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
2.原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
3.字符串必须使用双引号表示,不能使用单引号。
4.对象的键名必须放在双引号里面。
5.数组或对象最后一个成员的后面,不能加逗号。
JSON 对象
JSON对象是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify()
和JSON.parse()
。
JSON.stringify()方法用于将一个值转为 JSON 字符串。该字符串符合 JSON 格式,并且可以被JSON.parse()方法还原。
JSON.stringify()
JSON.stringify() 方法将一个值转换为json字符串
语法格式:JSON.stringify(value[, replacer [, space]])
value,表示将要序列化成 一个 JSON 字符串的值。
replacer 可选,如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。
space 可选,指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为 10。该值若小于 1,则意味着没有空格;如果该参数为字符串(当字符串长度超过 10 个字母,取其前 10 个字母),该字符串将被作为空格;如果该参数没有提供(或者为 null),将没有空格。
1.JSON.stringify(value)
let arr1 = ["one","two","three"]
let json1 = JSON.stringify(arr1)
console.log(json1) // ["one","two","three"]
2.JSON.stringify(value,replace)
JSON.stringify() 可以接受一个数组,作为第二个参数,用于指定参数对象的哪些属性需要转换为字符串.
var obj = {
'prop1':'prop1',
'prop2':'prop2',
'prop3':'prop3'
}
console.log(JSON.stringify(obj))
console.log(JSON.stringify(obj,['prop1','prop2']))
tips:其实第二个参数就相当于自选一些参数然后转换为JSON
3.JSON.stringify(value,replace,space)
JSON.stringify() 的第三个参数用来增加返回的JSON字符串的可读性
console.log(JSON.stringify({p1: 1,p2: 2},null,'\t'))
console.log(JSON.stringify({p1:1,p2:2},null,2))
tips:如果第三个参数为数字,那么则表示在每个属性前面添加的空格(最多不能超过十个)
4.注意的点
JSON.stringify() 会将对象的属性 中的undefined 函数 xml对象会被过滤
let st = {
name:undefined,
showInfo:function(){}
}
console.log( JSON.stringify(st)) // {}
如果数组的成员是undefined 函数,xml对象则将这些值转换为null
let arr2 = [undefined,function(){}]
console.log(JSON.stringify(arr2)) // [null,null]
正则对象也会被转换为空对象
console.log(JSON.stringify(/foo/)) //{}
即使用JSON.stringfiy()时,需要注意给方法里面传递的值对象。
JSON.parse()
JSON.parse() 方法用于将JSON字符串转换成对应的值
语法格式:JSON.parse(text[, reviver])
text,要被解析成 JavaScript 值的字符串
reviver 可选,转换器,如果传入该参数 (函数),可以用来修改解析生成的原始值,调用时机在 parse 函数返回之前。
JSON.parse('{}') // {} 对象
JSON.parse('"true"') // "true" 字符串
JSON.parse('true') // true 布尔值
console.log(JSON.parse('{"name":"张三"}')) // 对象 {name:'张三'}