stringify
JSON 对象并再次解析
是否有任何特定原因。
显然它将返回 Initial 对象本身。
这样做有好处吗?
Code 1: stringify and then parse
var textstring = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';
var obj=JSON.parse(textstring);
var obj2=JSON.parse(JSON.stringify(obj));
code 2:Direct Use
var textstring = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';
var obj=JSON.parse(textstring);
var obj2=obj;
最佳答案
我想你可能有一个根本性的误解。 JSON 是一种用于数据交换的文本符号。如果您处理的是 JavaScript 源代码,而不是字符串,那么您就不是在处理 JSON。
您不会“获取一个 JSON 对象并将其stringify
”。如果它是一个对象,它就不是 JSON;如果它是一个对象的 JSON 表示法,它就是一个字符串,您不会对其进行字符串化。
这是一个对象:
var foo = {answer: 42};
这里使用了stringify
:
var str = JSON.stringify(foo);
现在 str
是一个包含 JSON 的字符串,内容如下:
{"answer":42}
...exactly as though you had written this:
var str = '{"answer":42}';
您可以将其解析回一个对象(注意:不是“JSON 对象”,只是一个对象):
var foo2 = JSON.parse(str);
现在,foo
指的是原始对象,foo2
指的是具有属性副本的不同对象:
console.log(foo == foo2); // false, they're different object
console.log(foo.answer == foo2.answer); // true, they each have an answer property
// and their values match
console.log(foo.answer); // 42
console.log(foo2.answer); // 42
foo2.answer = 67;
console.log(foo.answer); // 42 | the objects and their properties
console.log(foo2.answer); // 67 | are not connected in any way
Is there any specific reason for
stringify
a JSON object andparse
it again.
有时人们将其用作穷人的克隆方法,因为您返回的对象与您字符串化的对象不同;它是一个具有相同属性的新对象(前提是原始对象的所有属性都可以序列化为 JSON;引用函数或具有值 undefined
的属性不能,以及许多其他值 [例如日期] 如果没有 JSON.parse
的“reviver”函数,就不会转换回来,所以它们最终会变成字符串或数字)。
这与您问题的最新版本中的代码相符:
Code 1: stringify and then parse
var textstring = '{ "employees" : [' + '{ "firstName":"John" , "lastName":"Doe" },' + '{ "firstName":"Anna" , "lastName":"Smith" },' + '{ "firstName":"Peter" , "lastName":"Jones" } ]}'; var obj=JSON.parse(textstring); var obj2=JSON.parse(JSON.stringify(obj));
Code 2:Direct Use
var textstring = '{ "employees" : [' + '{ "firstName":"John" , "lastName":"Doe" },' + '{ "firstName":"Anna" , "lastName":"Smith" },' + '{ "firstName":"Peter" , "lastName":"Jones" } ]}'; var obj=JSON.parse(textstring); var obj2=obj;
(请注意,我将 text
和 text2
更改为 obj
和 obj2
;它们不是文本。)
在代码 1 的末尾,obj
和 obj2
指的是不同 对象。如果更改 obj
引用的对象的其中一个属性,obj2
将完全不变:
// Replace the employees array with a blank one
obj.employees = [];
// No effect at all on obj2:
console.log(obj2.employees[0].firstName); // "John"
当然,与代码 2 相比,obj
和 obj2
都是对相同 对象的引用。
关于javascript - stringify然后解析一个JSON对象有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710307/