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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Элемент 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);
Пушать нельзя, нужно указать ключ,
obj['key'] = value.