jsonstringify(jsonstringify转json对象)
js之JSON.stringify()使用详解
方法定义:JSON.stringify(value, replacer, space)
参数说明:
value:js对象
replacer:替换对象,可以是一个方法、对象或数组,将value按照替换规则展示。
space:填充参数,可以是数字或字符串,将value按照参数进行格式化展示。
方法说明:将value对象转换为指定格式的json文本。
结果:
"字符串测试"
{"name":"张三","age":28,"gender":"男"}
[{"name":"张三","age":20,"gender":"男"},{"name":"李思","age":28,"gender":"女"}]
参数为function(key,value),会根据函数返回值替换value中的值。
例如替换上面对象的gender为英文大写。
结果:
{"name":"张三","age":28,"gender":"MAN"}
[{"name":"张三","age":20,"gender":"GRIL"},{"name":"李思","age":28,"gender":"GRIL"}]
参数为数组时,会遍历数组的值,以数组的值作为value的属性。如果value原本包含该属性,那么显示该属性,如果不包含则不显示。例如:
上面的name数组包含3个值,而testObj对象值包含其中的name属性和gender属性,并不存在gril属性,所以,只会显示name和gender属性。
结果:
{"name":"张三","gender":"man"}
[{"name":"张三","gender":"gril"},{"name":"李思","gender":"gril"}]
如果将参数改为一个对象数组,那么因为对象不是一个属性,key值为“”,所以会显示一个空对象:{}
如果space参数为数字n时,value对象将被格式化,并且属性会缩进n个字符。n10时,只会缩进10个空格,n10时,缩进n个空格,n=0时不进行格式化。例如:
如果space为特殊字符时,按照特殊字符格式化。
例如:"\n":每行换行。"aa":每行头部添加aa字母。
JSON.stringify详解
当我们使用 JSON.stringify() 序列化一个值为JSON字符串,只有 JSON安全的值 才可以通过 JSON.stringify() 转换为字符串。那么,什么是 JSON安全的值 ?能够有效用JSON形式表示的任何值。
非JSON安全的值,例如: undefined 、 function 和 symbol 以及循环引用的object(对象结构的属性引用通过创建彼此,构成一个无限循环)。对一个标准的JSON结构来说,这些值都是非法的,主要是因为它们无法移值到其他支持JSON的语言中。
当 JSON.stringify() 遇到 undefined 、 function 和 symbol 的时候,会自动忽略它们的值,如果这样的值在数组中会被替换成 null (这样数组的索引信息就不会被改变)。如果这样的值出现在对象的属性中,那这个属性会被排除掉。
JSON字符串有一个特殊的行为,如果一个对象定义了 toJSON() 方法,那这个方法先被调用,并且将它返回的值进行序列化。
如果将一个含有非法JSON值的对象序列化成JSON字符串,需要定义一个 toJSON() 方法,用于返回该对象的JSON安全版本。
JSON.stringify()第二个参数是个可选参数,被称为replacer。这个参数可以是数组或者函数。它提供了一个过滤机制制定了应该或者不应该包含哪些属性,从而实现了对象可定制的递归序列化,这种做法和toJSON()如何序列化准备一个值很相似。
如果replacer是一个数组,它应该是一个字符串数组,每一个值都指定了对象的属性名称,代表属性应该被加入到序列化中,如果一个属性不在这个列表中,它会被跳过。
如果replacer是一个函数,它首先会被该对象调用一次,然后该对象的每个属性会调用一次,每次都会给这个函数传递两个值,key和value。想在序列化过程中跳过某个key,只需要返回undefined,否则返回提供的value。
第三个可选的参数也可以传递给JSON.stringify(),被称为space,被用作缩进,是为了使得输出有格式更加漂亮。space可以是一个正整数,指定每层缩进应该缩进多少个空格。或者space也可以是个字符串,其值的前十个字符被用于每个缩进层次。
关于JSON.stringify的妙用
我们都知道JSON对象有两个方法,一个是parse,用来把json字符串转换为json对象,另一个是stringify,用来把json对象转换为json字符串, 可是stringify其实还有其它作用。
比如说有一个对象 {a:1,b:2,c:3,d:4,e:5} ,现在我们只需要b属性和e属性,可以这样来操作
JSON.stringify(value, replacer , space) 语法
将要序列化成 一个JSON 字符串的值。
如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为null或者未提供,则对象所有的属性都会被序列化。
指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;如果该参数没有提供(或者为null)将没有空格。