我想知道如何创建JSON(JS)对象然后克隆它。
答案 0 :(得分:38)
这就是我所做的,它就像一个魅力
if (typeof JSON.clone !== "function") {
JSON.clone = function(obj) {
return JSON.parse(JSON.stringify(obj));
};
}
答案 1 :(得分:23)
只做
var x = {} //some json object here
var y = JSON.parse(JSON.stringify(x)); //new json object here
答案 2 :(得分:14)
从ES6开始。 Object.assign是一种很好的方法。
newjsonobj = Object.assign({}, jsonobj, {})
第一个参数中的项目改变现有对象,第三个参数是返回的新对象中的更改。
在ES7中,建议使用扩展运算符。
newjsonobj = {...jsonobj}
答案 3 :(得分:6)
如何在javascript / jquery中创建JSON对象?
没有像JSON 对象那样的东西。 JSON代表 JavaScript Object Notation ,基本上是一个字符串,用于编码类似于JavaScript的对象文字的信息。
但是,您可以使用JSON.stringify(object)
创建此类编码(这将导致字符串),请参阅JSON in JavaScript。您也可以手动创建这样的字符串,但它非常容易出错,我不推荐它。
如何在javascript / jquery中克隆JSON对象?
因为它只是一个字符串:
var jsonString2 = jsonString;
我不能再使用javascript数组了
JSON是交换数据的格式,它不是您可以在应用程序中使用的数据结构。
答案 4 :(得分:6)
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的extend函数。例如,您可以生成用户对象的克隆,如下所示:
var cloneUser = $.extend(true, {}, {firstName:"John", lastName:"Doe"});
第一个参数指定克隆对象是原始的浅表还是深表(请参阅维基上的Object copy)。
要查看其他JSON克隆备选方案,您可以阅读this文章。
答案 5 :(得分:5)
这是我在解析JSON并在代码中多次重用它时经常遇到的问题。并且您希望避免每次从原始JSON字符串重新解析,或者采用效率较低的serialize/parse
方式。
因此,在这些情况下,如果要调整已解析的对象但仍保持原始状态不变,请在服务器( NodeJs )或客户端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;
}
答案 6 :(得分:1)
我们可以如下克隆JSON对象。
EmployeeDetails =
{
Name:"John Deer",
Age:29,
Company:"ABC Limited."
}
现在创建一个克隆函数
function clonning(Employee)
{
// conversion from Object to String
var EmployeeString = JSON.stringify(Employee);
// conversion from String to Object type
var EmployeeConvertedObject = JSON.parse(EmployeeString);
// printing before changing prperty value.
console.log(EmployeeConvertedObject);
// modifying EmployeeConvertedObject property value
EmployeeConvertedObject.Name="Kelvin Bob";
// printing After changing prperty value.
console.log(EmployeeConvertedObject);
// Now printing original json object.
console.log(Employee);
// Here original JSON object is not affecting. Only Cloned object affecting.
}
现在的通话功能。
clonning(EmployeeDetails);
结果:
clonning(EmployeeDetails)
VM212:22 {Name: "John Deer", Age: 29, Company: "ABC Limited."}
VM212:30 {Name: "Kelvin Bob", Age: 29, Company: "ABC Limited."}
VM212:34 {Name: "John Deer", Age: 29, Company: "ABC Limited."}
答案 7 :(得分:0)
我们假设, 我们有一个JSONOBJECT EmailData,其中包含一些数据。现在,如果您想在另一个对象中复制相同的数据(即克隆数据),则可以执行以下操作:
JSONOBJECT clone_EmailData=new JSONOBJECT(EmailData.toString());
上面的语句将为您提供一个具有相同数据的新对象,并且该新对象不是对EmailData对象的引用。
答案 8 :(得分:-1)
您尝试在ES6中使用spread elements
吗?
例如
var a = {
name:"stackoverflow"
}
var merged = {
...a
site:"stackoverflow.com"
}
其中只有syntactic sugar
。
这是一个新的json,一个深层副本