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

时间:2016-04-19 06:33:50

标签: javascript jquery json clone stringify

store-product JSON对象和stringify是否有任何具体原因。 显然它会返回Initial对象本身。 这样做有好处吗?

  

代码1:stringify然后解析

parse
  

代码2:直接使用

 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));

1 个答案:

答案 0 :(得分:14)

我认为你可能有一个根本的误解。 JSON是用于数据交换的文本符号。如果您正在处理JavaScript源代码,而不是处理字符串,那么您就不会处理JSON。

你没有"带一个JSON对象和stringify它。"如果它是一个对象,它不是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
  

stringify JSON对象和parse是否有任何具体原因。

有时人们会将其用作穷人的克隆方法,因为你得到的对象与你所编制的对象不同;它是一个具有相同属性的新对象(前提是原始的所有属性都可以序列化为JSON;引用函数的属性,或者值为undefined的属性都不可以,并且许多其他值不会在JSON.parse}没有" riviver"函数的情况下转换回来。

这符合您问题的最新版本中的代码:

  

代码1:stringify然后解析

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));
     

代码2:直接使用

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"