Подтвердить что ты не робот

Как создать и клонировать объект JSON?

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

4b9b3361

Ответ 1

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

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

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

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

Так как это просто строка:

var jsonString2 = jsonString;

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

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


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

Ответ 2

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

if (typeof JSON.clone !== "function") {
    JSON.clone = function(obj) {
        return JSON.parse(JSON.stringify(obj));
    };
}

Ответ 3

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

var x = {} //some json object here
var y = JSON.parse(JSON.stringify(x)); //new json object here

Ответ 4

Как и ES6. Object.assign - хороший способ сделать это.

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

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

В ES7 предлагается использовать оператор спреда.

newjsonobj = {...jsonobj}

Ответ 5

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) или функцию jQuery $.parseJSON(yourJsonString).

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

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

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

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

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

Ответ 6

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

Итак, в тех случаях, когда вы хотите настроить анализируемый объект, но сохраняете исходный код неизменным, используйте следующую функцию на сервере (NodeJs) или на JavaScript-код клиента. Функция jQuery clone менее эффективна, поскольку обрабатывает случаи для функций, regexp и т.д. В приведенной ниже функции рассматриваются только поддерживаемые JSON типы (null, undefined, число, строка, массив и объект):

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;
}

Ответ 7

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

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

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