如何创建和克隆JSON对象?

mat*_*aso 32 javascript jquery json

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

Mat*_*epa 39

这就是我的工作,它就像一个魅力

if (typeof JSON.clone !== "function") {
    JSON.clone = function(obj) {
        return JSON.parse(JSON.stringify(obj));
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 但值得一提的是,它将日期等对象转换为字符串等。 (2认同)

小智 25

做就是了

var x = {} //some json object here
var y = JSON.parse(JSON.stringify(x)); //new json object here
Run Code Online (Sandbox Code Playgroud)

  • 在嵌套 JSON 对象还包括与 Array 对象关联的键的情况下,这种方法似乎会引起数据类型之间的一些转换问题。就我而言,克隆的对象生成 key : {},而不是原始 key : [] 下面帖子中的方法看起来是 newjsonobj = {...jsonobj},看起来更可取 (3认同)

Sha*_*moo 16

截至ES6.Object.assign是一种很好的方法.

newjsonobj = Object.assign({}, jsonobj, {})
Run Code Online (Sandbox Code Playgroud)

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

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

newjsonobj = {...jsonobj}
Run Code Online (Sandbox Code Playgroud)

  • 这会创建一个浅层克隆:如果这些值像对象或数组一样可变,那么对第一个JSON对象中的值的任何修改都将影响克隆(反之亦然).例如`var a = {arr:[1,2,3]}; var b = Object.assign({},a,{}); b.arr [0] = 4; console.log(a.arr);`按预期打印出`[4,2,3]`而不是`[1,2,3]`. (6认同)

Fel*_*ing 6

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

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

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

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

因为它只是一个字符串:

var jsonString2 = jsonString;
Run Code Online (Sandbox Code Playgroud)

我不能再使用javascript数组了

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


也许你想了解更多关于JSON,JS中的对象和JS中的数组.

  • 第二个答案是不对的."="运算符不会克隆任何对象,而是传递引用. (5认同)
  • @FelixKling:然后它是一个无效问题的答案.接下来它不是答案.我认为最好删除这条线,以免混淆驱逐读者并传播误解. (4认同)

ovu*_*tin 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.
Run Code Online (Sandbox Code Playgroud)

创建后,您可以为对象添加额外的字段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"});
Run Code Online (Sandbox Code Playgroud)

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

要查看其他JSON克隆的替代品,你可以阅读文章.


Gab*_*vay 5

这是我在解析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;
}
Run Code Online (Sandbox Code Playgroud)