stringify然后解析一个JSON对象有什么用

What is the use of stringify and then parse a JSON object

stringifya JSON object and parseit again 是否有任何特定原因。 显然它将 return 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.

你不"take a JSON object and stringify it."如果它是一个对象,它就不是JSON;如果它是一个对象的 JSON 符号,它就是一个字符串,你不会将它字符串化。

这是一个对象:

var foo = {answer: 42};

这里使用 stringify:

var str = JSON.stringify(foo);

现在str是一个包含JSON的字符串,内容为:

{"answer":42}

...就像您写的一样:

var str = '{"answer":42}';

您可以将其解析回一个对象(注意:不是 "JSON object," 只是一个对象):

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 and parse 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;

(注意我将 texttext2 更改为 objobj2;它们不是文本。)

在代码1的最后,objobj2指的是不同的对象。如果更改 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 相比,objobj2 都是对 相同 对象的引用。