JSON基本概念及JSON对象的静态方法讲解
程序员文章站
2022-06-11 11:07:02
json基本概念
javascript object notation——js对象表示法
存储和交换文本信息的语法,属于独立性语言
每个 json 对象就是一个值,值的类型和...
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}