Добавить объект или массив в строку json с помощью javascript

У меня есть строка JSON, и я хочу добавить

"23":{"email":"[email protected]"}

к нему, но я не могу добавить новый объект, например

var json_string = '{"21":{"email":"abc@com"},"22":{"email":"abc2@com"}}';
var obj = JSON.parse(json_string); // to get a object
// Add
var new_obj = {
  23: {"email" : "[email protected]"}
};
obj.push(new_obj);
console.info(obj);

Результатом этого будет следующее сообщение об ошибке:

obj.push is not a function

Для лучшего понимания: я хочу добавить объект в строку json Я поменял new_obj на

var new_obj = [{23,[{"email","[email protected]"}]];

но, возможно, у меня проблема в другой части.

Пушать нельзя, нужно указать ключ, obj['key'] = value.

Script47 26.11.2018 16:22

Кажется, вы запутались в объектах и ​​массивах. Обычно список данных хранится в массиве объектов, например [{name:"bob", id: 1}, {name: "bill", id: 2}]. Затем вы можете просто вставить новый объект в массив, как вы пытаетесь это сделать. И используйте собственные функции, такие как sort, filter, find, для работы с этим массивом.

James 26.11.2018 16:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
72
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Элемент Array.push() добавляет в конец массива, но переменная obj не является массивом. Это объект, и вы должны добавить к нему свойство, как показано внизу.

var json_string = '{"21":{"email":"abc@com"},"22":{"email":"abc2@com"}}';
var obj = JSON.parse(json_string);
obj[23] = {"email": "[email protected]"}
console.info(obj);

Метод push() доступен только для массивов. Вам необходимо создать свои:

var json_string = '{"21":{"email":"abc@com"},"22":{"email":"abc2@com"}}';
var obj = JSON.parse(json_string); // to get a object

let pushToObj = function pushToObj(targetObj, newObj) {
    let key = Object.keys(targetObj).sort();
    
    key = Number(key[key.length - 1]);
    
    targetObj[(key + 1).toString()] = newObj;
};

// Add
pushToObj(obj, {"email" : "[email protected]"});

console.info(obj);
Ответ принят как подходящий

Как уже упоминалось, ваш JSON не является массивом.

Если вы хотите встроить объект в new_obj, простой способ добавить - использовать Object.assign.

например.

var json_string = '{"21":{"email":"abc@com"},"22":{"email":"abc2@com"}}';
var obj = JSON.parse(json_string); // to get a object

// Add
var new_obj = {
    23: {"email" : "[email protected]"}
};


Object.assign(obj, new_obj);
//obj.push(new_obj);

console.info(obj);

Чтобы добавить к ответу @Keith, вы также можете использовать для этого оператор остальное распространение:

var json_string = '{"21":{"email":"abc@com"},"22":{"email":"abc2@com"}}';
var obj = JSON.parse(json_string); // to get a object

// Add
var new_obj = {
    23: {"email" : "[email protected]"}
};

obj = {...obj, ...new_obj};

console.info(obj);

Другие вопросы по теме