如何创建和克隆JSON对象?

我想知道如何创建一个JSON(JS)对象,然后克隆它。

如何在javascript / jquery中创建JSON对象?

没有像JSON 对象那样的东西。 JSON代表JavaScript Object Notation ,基本上是一个字符串,它编码类似于JavaScript的对象文字的信息。

但是,您可以使用JSON.stringify(object)创建这样的编码(这将产生一个字符串 JSON.stringify(object) ,请参阅JavaScript中的JSON 。 您也可以手动创建这样的字符串,但它非常容易出错,我不推荐它。

如何在javascript / jquery中克隆JSON对象?

因为它只是一个字符串:

 var jsonString2 = jsonString; 

我不能再使用javascript数组了

JSON是一种交换数据的格式,它不是可以在应用程序中使用的数据结构。


也许你想要阅读更多关于JSON ,JS中的对象和JS中的数组 。

这就是我所做的,它就像一个魅力

 if (typeof JSON.clone !== "function") { JSON.clone = function(obj) { return JSON.parse(JSON.stringify(obj)); }; } 

做就是了

 var x = {} //some json object here var y = JSON.parse(JSON.stringify(x)); //new json object here 

从ES6开始。 Object.assign是一种很好的方法。

 newjsonobj = Object.assign({}, jsonobj, {}) 

第一个参数中的项目改变现有对象,第三个参数是返回的新对象中的更改。

在ES7中,建议使用扩展运算符。

 newjsonobj = {...jsonobj} 

这是我在解析JSON并在代码中多次重用它时经常遇到的问题。 并且您希望避免每次从原始JSON字符串重新解析,或者采用serialize/parse方式,这是效率较低的方式。

因此,在您希望调整已解析对象但仍保持原始未更改的这些情况下,请在服务器( NodeJ )或客户端JavaScript代码中使用以下函数。 jQuery clone函数效率较低,因为它们处理函数,regexp等的情况。下面的函数只处理JSON支持的类型(null,undefined,number,string,array和object):

 function cloneJSON(obj) { // basic type deep copy if (obj === null || obj === undefined || typeof obj !== 'object') { return obj } // array deep copy if (obj instanceof Array) { var cloneA = []; for (var i = 0; i < obj.length; ++i) { cloneA[i] = cloneJSON(obj[i]); } return cloneA; } // object deep copy var cloneO = {}; for (var i in obj) { cloneO[i] = cloneJSON(obj[i]); } return cloneO; } 

Q1如何在javascript / jquery中创建JSON对象?

创建一个Javascript对象非常简单:

 var user = {}; // creates an empty user object var user = {firstName:"John", lastName:"Doe"}; // creates a user by initializing // its firstName and lastName properties. 

创建后,您可以向对象添加额外的字段,如user.age = 30;

如果您将对象作为JSON字符串,则可以使用内置的JSON.parse(yourJsonString)函数或jQuery的$.parseJSON(yourJsonString)函数将其转换为JSON对象。

Q2如何在javascript / jquery中克隆JSON对象?

我克隆JSON对象的方法是jQuery的扩展函数。 例如,您可以生成用户对象的克隆,如下所示:

 var cloneUser = $.extend(true, {}, {firstName:"John", lastName:"Doe"}); 

第一个参数指定克隆对象是原始的浅表还是深表(请参阅Wiki上的对象副本 )。

要查看其他JSON克隆替代方法,您可以阅读本文。

您是否尝试在ES6中使用spread elements

传播元素

例如

 var a = { name:"stackoverflow" } var merged = { ...a site:"stackoverflow.com" } 

这只是一个syntactic sugar

这是一个新的json,一个深刻的副本

我们假设,我们有一个JSONOBJECT EmailData,里面有一些数据。 现在,如果您想在另一个对象中使用相同的数据(即克隆数据),那么您可以执行以下操作:

 JSONOBJECT clone_EmailData=new JSONOBJECT(EmailData.toString()); 

上面的语句将为您提供具有相同数据的新对象,并且新对象不是对EmailData对象的引用。