stringifya JSON对象和parseit是否有任何特定原因.
显然它会返回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对象并对其进行字符串化”.如果它是一个对象,它不是JSON;如果它是一个对象的JSON表示法,它是一个字符串,你不会对它进行字符串化.
这是一个对象:
var foo = {answer: 42};
这里使用stringify:
var str = JSON.stringify(foo);
现在str是一个包含JSON的字符串,其内容如下:
{"answer":42}
……就像你写的那样:
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;属性引用函数,或者值未定义,不能,并且许多其他值不转换回JSON.parse的“riviver”函数.
这符合您问题的最新版本中的代码:
Code 1: stringify and then parse
06006
Code 2:Direct Use
06007
(注意我将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"