JavaScript的对象与Json
JSON有非常严格的语法,在string上下文里{ "prop": "val" } 是个合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }确实不合法的。所有属性名称和它的值都必须用双引号引住,不能使用单引号。在string上下文里使用带有大括号的JavaScript对象,那它就是JSON字符串,而如果在对象字面量上下文里使用的话,那它就是对象字面量。
1 JSON.stringify(true); // 'true' 2 3 JSON.stringify('foo'); // '"foo"' 4 5 JSON.stringify([1, 'false', false]); // '[1,"false",false]' 6 7 JSON.stringify({ x: 5 }); // '{"x":5}' 8 9 10 11 JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)) // '"2006-01-02T15:04:05.000Z"' 12 13 14 15 JSON.stringify({ x: 5, y: 6 });// '{"x":5,"y":6}' or '{"y":6,"x":5}' 16 17 JSON.stringify([new Number(1), new String('false'), new Boolean(false)]);// '[1,"false",false]' 18 19 20 21 JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] }); // '{"x":[10,null,null,null]}' 22 23 // Symbols: 24 25 JSON.stringify({ x: undefined, y: Object, z: Symbol('') });// '{}' 26 27 JSON.stringify({ [Symbol('foo')]: 'foo' });// '{}' 28 29 JSON.stringify({ [Symbol.for('foo')]: 'foo' }, [Symbol.for('foo')]);// '{}' 30 31 JSON.stringify({ [Symbol.for('foo')]: 'foo' }, function(k, v) { 32 33 if (typeof k === 'symbol') { 34 35 return 'a symbol'; 36 37 }});// '{}' 38 39 // Non-enumerable properties: 40 41 JSON.stringify( Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );// '{"y":"y"}' 42 43 function replacer(key, value) { 44 45 // Filtering out properties 46 47 if (typeof value === "string") { 48 49 return undefined; 50 51 } 52 53 return value;} 54 55 var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; 56 57 JSON.stringify(foo, replacer);// '{"week":45,"month":7}' 58 59 JSON.stringify(foo, ['week', 'month']); // '{"week":45,"month":7}', only keep "week" and "month" properties 60 61
如果字符串化对象有一个属性叫tojson其值是一个函数,然后tojson()方法自定义JSON字符串化所带来的行为,而不是被序列化的对象,返回的值将被序列化tojson()方法调用时。例如
1 var obj = { 2 3 foo: 'foo', 4 5 toJSON: function() { 6 7 return 'bar'; 8 9 }}; 10 11 JSON.stringify(obj); // '"bar"' 12 13 JSON.stringify({ x: obj }); // '{"x":"bar"}'
5:JSON.parse()
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null