JSON 对象正则表达式
JSON (JavaScript Object Notation 的缩写)json
也是一种数据,是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify()
和 JSON.parse()
数组
是一种无序的属性名和属性值的集合,用于网站的先后台交互。函数
var p = { name: '周杰伦', age: 40 }; var jsonObj = { "name":"陶喆", "age":"45", "gender":"true", };
// 发送
var jsonStr = JSON.stringify(jsonObj); //
// 接收
var jsonObj = JSON.parse(jsonStr); //
// for...in...遍历 json对象
for var k in jsonObj{
console
}
JSON.parse
方法还原JSON.stringify('foo') === "foo" // false JSON.stringify('foo') === "\"foo\"" // true //字符串foo,被转成了"\"foo"\"。 // 这是由于未来还原的时候,内层双引号可让 JavaScript 引擎知道,这是一个字符串,而不是其余类型的值 JSON.stringify(false); // "false" // 因为没有内层双引号,因此原始值是布尔,而不是字符串 JSON.stringify('false'); // "\"false\""
undefined
、函数或 XML 对象,该属性会被 JSON.stringify
过滤undefined
、函数或 XML 对象,则这些值被转成 null
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
或没有返回值,则该属性会被忽略o
function f(key, value) { if (typeof value === "number") { value = 2 * value; } return value; } JSON.stringify({ a: 1, b: 2 }, f); // '{"a": 2,"b": 4}'
JSON.stringify({ p1: 1, p2: 2 }, null, 2); /* "{ "p1": 1, "p2": 2 }" */ JSON.stringify({ p1:1, p2:2 }, null, '|-'); /* "{ |-"p1": 1, |-"p2": 2 }" */
toJSON
方法的一个应用是,将正则对象自动转为字符串。JSON.stringify
默认不能转换正则对象,可是设置了toJSON
方法之后,就能够转换正则对象了
var obj = { reg: /foo/ }; // 不设置 toJSON 方法时 JSON.stringify(obj) // "{"reg":{}}" // 设置 toJSON 方法时 RegExp.prototype.toJSON = RegExp.prototype.toString; JSON.stringify(/foo/) // ""/foo/""
JSON.parse
方法将报错JSON.parse
方法放在try...catch
代码块中
try { JSON.parse("'String'"); } catch(e) { console.log('parsing error'); }
JSON.stringify
方法相似
function f(key, value) { if (key === 'a') { return value + 10; } return value; } JSON.parse('{"a": 1, "b": 2}', f); // {a: 11, b: 2}