JSON对象三方法

     每个JSON对象,就是一个值。要么是简单类型的值,要么是复合类型的值。

  1. 复合类型的值只能是数组或对象.
  2. 简单类型的值只有四种:字符串、数值(十进制表示)、布尔值和null。

  3. 字符串必须使用双引号表示,不能使用单引号。

  4. 对象的键名必须放在双引号里面。

  5. 数组或对象最后一个成员的后面,不能加逗号。

JSON.stringify       

说明:将一个值转为字符串

JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"

第二参数:

JSON.stringify方法还可以接受一个数组,作为第二个参数,指定需要转成字符串的属性。

例1:属性
var obj = {
  'prop1': 'value1',
  'prop2': 'value2',
  'prop3': 'value3'
};

var selectedProperties = ['prop1', 'prop2'];

JSON.stringify(obj, selectedProperties)     // "{"prop1":"value1","prop2":"value2"}"


例2:只对对象的属性有效,对数组无效。
JSON.stringify(['a', 'b'], ['0'])
// "["a","b"]"

JSON.stringify({0: 'a', 1: 'b'}, ['0'])
// "{"0":"a"}"


例3:第二个参数还可以是一个函数,用来更改JSON.stringify的默认行为。

function f(key, value) {
  if (typeof value === "number") {
    value = 2 * value;
  }
  return value;
}

JSON.stringify({ a: 1, b: 2 }, f)     // '{"a": 2,"b": 4}'
/*f函数,接受两个参数,分别是被转换的对象的键名和键值。*/

  

第三参数:

说明:用于增加返回的JSON字符串的可读性。如果是数字,每个属性前面添加的空格不超过10个;如果是字符串(不超过10个);该字符串会添加在每行前面。

JSON.stringify({ p1: 1, p2: 2 }, null, 2);
/*
"{
  "p1": 1,
  "p2": 2
}"
*/

JSON.stringify({ p1:1, p2:2 }, null, '|-');
/*
"{
|-"p1": 1,
|-"p2": 2
}"
*/

  

toJSON 方法

如果对象有自定义的toJSON方法,那么JSON.stringify会使用这个方法的返回值作为参数,而忽略原对象的其他属性。

例一:

var user = {
  firstName: '三',
  lastName: '张',

  get fullName(){
    return this.lastName + this.firstName;
  },

  toJSON: function () {
    var data = {
      firstName: this.firstName,
      lastName: this.lastName
    };
    return data;
  }
};

JSON.stringify(user)
// "{"firstName":"三","lastName":"张"}"

例二:JSON.stringify一旦发现处理的是data对象实例,就会自动调用这个实例对象的toJSON方法,将该方法的返回值作为参数。

var date = new Date('2015-01-01');
date.toJSON() // "2015-01-01T00:00:00.000Z"
JSON.stringify(date) // ""2015-01-01T00:00:00.000Z""

例三:将正则对象自动转为字符串。设置了toJSON方法以后,就可以转换正则对象了。

var obj = {
  reg: /foo/
};

// 不设置 toJSON 方法时
JSON.stringify(obj) // "{"reg":{}}"

// 设置 toJSON 方法时
RegExp.prototype.toJSON = RegExp.prototype.toString;
JSON.stringify(/foo/) // ""/foo/""

  

JSON.parse方法用于将JSON字符串转化成对象。

JSON.parse('{}') // {}
JSON.parse('true') // true
JSON.parse('"foo"') // "foo"
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null

  

JSON.parse方法可以接受一个处理函数

function f(key, value) {
  if (key === ''){
    return value;
  }
  if (key === 'a') {
    return value + 10;
  }
}

var o = JSON.parse('{"a":1,"b":2}', f);
o.a // 11
o.b // undefined

  

 ↑↑看不懂

https://www.w3cschool.cn/javascript_guide/javascript_guide-l1232690.html

猜你喜欢

转载自www.cnblogs.com/Longhua-0/p/9296696.html