Как создать и клонировать объект JSON? - PullRequest
31 голосов
/ 08 ноября 2010

Мне было интересно, как я могу создать объект JSON (JS) и затем клонировать его.

Ответы [ 7 ]

38 голосов
/ 13 июля 2013

Это то, что я делаю, и это работает как шарм

if (typeof JSON.clone !== "function") {
    JSON.clone = function(obj) {
        return JSON.parse(JSON.stringify(obj));
    };
}
24 голосов
/ 30 июля 2014

Просто сделай

var x = {} //some json object here
var y = JSON.parse(JSON.stringify(x)); //new json object here
14 голосов
/ 24 марта 2017

Начиная с ES6.Object.assign - хороший способ сделать это.

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

Элементы первого аргумента изменяют существующий объект, а третий аргумент - это изменения в возвращаемом новом объекте.ES7 предлагается использовать оператор распространения.

newjsonobj = {...jsonobj}
6 голосов
/ 13 февраля 2014

Q1 : Как создать объект JSON в javascript / jquery?

Создать объект 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, используя встроенную функцию JSON.parse(yourJsonString) или функцию $.parseJSON(yourJsonString) jQuery.

Q2 : Как мне клонировать объект JSON в javascript / jquery?

Мой способ клонировать объекты JSON - это расширение функции jQuery. Например, вы можете сгенерировать клон вашего пользовательского объекта, как показано ниже:

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

Первый параметр указывает, будет ли объект-клон мелкой или глубокой копией оригинала (см. Копия объекта в вики).

Чтобы увидеть другие альтернативы клонирования JSON, вы можете прочитать эту статью.

6 голосов
/ 08 ноября 2010

Как создать объект JSON в javascript / jquery?

Ничто не сравнится с объектом JSON .JSON расшифровывается как JavaScript Object Notation и представляет собой строку, которая кодирует информацию, аналогичную объектным литералам JavaScript.

Однако вы можете создать такую ​​кодировку (что приведет к string ) с JSON.stringify(object), см. JSON в JavaScript .Вы также можете создать такую ​​строку вручную, но она очень подвержена ошибкам, и я не рекомендую ее.

Как мне клонировать объект JSON в javascript / jquery?

Поскольку это просто строка:

var jsonString2 = jsonString;

Я больше не могу работать с массивами javascript

JSON - это формат exchange данные, это не структура данных, которую вы можете использовать в приложении.


Может быть, вы хотите узнать больше о JSON , объектах в JSи массивы в JS.

5 голосов
/ 06 июля 2013

Это проблема, с которой я часто сталкивался при разборе JSON и повторном его использовании в коде несколько раз.И вы хотите избежать повторного разбора каждый раз из исходной строки JSON или идти по пути serialize/parse, который является менее эффективным.

Так что в этих случаях, когда вы хотите настроить анализируемый объект, но все жеоставьте оригинал без изменений, используйте следующую функцию в коде javascript сервера ( NodeJs ).Функция jQuery clone менее эффективна, потому что они обрабатывают случаи для функций, регулярных выражений и т. Д. Функция, приведенная ниже, обрабатывает только поддерживаемые типы 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;
}
0 голосов
/ 26 сентября 2018

Давайте предположим, У нас есть JSONOBJECT EmailData, в котором есть некоторые данные. Теперь, если вам нужны те же данные в другом объекте (т.е. клонировать данные), вы можете сделать что-то вроде этого:

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

Приведенный выше оператор даст вам новый объект с теми же данными, и новый объект не является ссылкой на объект EmailData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...