当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JSON基本概念及JSON对象的静态方法讲解

JSON基本概念及JSON对象的静态方法讲解

2018年09月13日  | 移动技术网IT编程  | 我要评论

json基本概念

javascript object notation——js对象表示法

存储和交换文本信息的语法,属于独立性语言

每个 json 对象就是一个值,值的类型和格式有严格规定:

复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。 原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用nan, infinity, -infinity和undefined)。 字符串必须使用双引号表示,不能使用单引号。 对象的键名必须放在双引号里面。 数组或对象最后一个成员的后面,不能加逗号。

json 对象的静态方法

json.stringify()

基本用法:

// 将一个值转为 json 字符串
// 可以被json.parse方法还原

json.stringify('abc') // ""abc""
json.stringify([1, "false", false])
// '[1,"false",false]'

// 如果对象的属性是undefined、函数或 xml 对象,该属性会被json.stringify过滤。
var obj = {
  a: undefined,
  b: function () {}
};
json.stringify(obj) // "{}"

// 如果数组的成员是undefined、函数或 xml 对象,则这些值被转成null。
var arr = [undefined, function () {}];
json.stringify(arr) // "[null,null]"

// 正则对象会被转成空对象
json.stringify(/foo/) // "{}"

// json.stringify方法会忽略对象的不可遍历属性。
var obj = {};
object.defineproperties(obj, {
  'foo': {
    value: 1,
    enumerable: true
  },
  'bar': {
    value: 2,
    enumerable: false
  }
});

json.stringify(obj); // "{"foo":1}"

第二个参数:

// 第二个参数是数组时,指定需要转成字符串的属性,相当于筛选(白名单)
// 只对对象的属性有效,对数组无效。
var obj = {
  'prop1': 'value1',
  'prop2': 'value2',
  'prop3': 'value3'
};
var selectedproperties = ['prop1', 'prop2'];
json.stringify(obj, selectedproperties) // "{"prop1":"value1","prop2":"value2"}"

// 第二个参数是一个函数时,用来更改json.stringify的返回值。
// 递归处理,第一次键名为空,键值是整个对象
// 如果处理函数返回undefined或没有返回值,则该属性会被忽略。
var o = {a: 1};
function f(key, value) {
  if (typeof value === 'object') {
    return {b: 2};
  }
  return value * 2;
}
json.stringify(o, f)// "{"b": 4}"

第三个参数:

// 用于增加返回的 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 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

// 第二个参数,处理函数
function f(key, value) {
  if (key === 'a') {
    return value + 10;
  }
  return value;
}

json.parse('{"a": 1, "b": 2}', f)
// {a: 11, b: 2}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网