JSON.stringify常用用法、可转换类型、灵活用法

能处理的(安全JSON):

通常为对象或者数组,也可以是字符串、数字、布尔值和null,结果都是字符串('aa','33','null','true')

不能处理的(不安全JSON):

undefined,function,symbol,循环引用的对象(自己里面引用了自己)

扩展知识:JSON.stringify在转换之前,如果传入对象中的有.toJSON()方法,会先调用toJSON(),用它的返回值再进行字符串化,另可以自行编写toJSON()方法

参数:

JSON.stringify(json [, replacer] [, space])

除了常用的,只传一个参数,还有另外两个参数replacerspace可供选择:
1、replacer可以传递:

①函数,此函数有两个参数,传入json的keyvalue

大家可以打印一下key,和value,看得出对于json是由内而外递归遍历出来的,把嵌套json直接扁平化了,所以我们可以省去还得遍历多层级json的复杂情况,直接在JSON.stringify()里面操作即可

function replacer(key, value) {
	console.log(key,value)  //见下key和value注释
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}

var foo = {factoryLocation:'shanghai', info: {brand:'tesla',Mileage :{modelY:660,modelX:550}}, month: 9};
var jsonString = JSON.stringify(foo, replacer);  // 输出为:"{"info":{"Mileage":{"modelY":660,"modelX":550}},"month":9}"

// key和value:

// {factoryLocation: "shanghai", info: {…}, month: 9}
// factoryLocation shanghai
// info : {brand: "tesla", Mileage: {…}}
// brand tesla
// Mileage : {modelY: 660, modelX: 550}
// modelY 660
// modelX 550
// month 9

②数组:由一个或多个字符串构成的数组,代表指定需要被转换的键值对,其他未指定则忽略:

JSON.stringify(foo, ['week', 'month']);  
// '{"week":45,"month":7}', 只保留“week”和“month”属性值。
2、最后一个可选参数space,可以传入制表符等符号代表字符串化后的缩进形式,也可传入数字代表缩进空格数量:
JSON.stringify({ a: 2 }, null, " ");   // '{\n "a": 2\n}'

//使用制表符(\t)来缩进:
JSON.stringify({ uno: 1, dos : 2 }, null, '\t')
// '{            \
//     "uno": 1, \
//     "dos": 2  \
// }'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章