如何创建和克隆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对象的引用。