如何创建和克隆JSON对象?

时间:2010-11-08 00:24:22

标签: javascript jquery json

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

9 个答案:

答案 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是交换数据的格式,它不是您可以在应用程序中使用的数据结构。


也许您想了解更多关于JS中的JSONobjects和JS中的arrays

答案 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吗?

spread elements

例如

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

其中只有syntactic sugar

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