У меня возникли проблемы в коде ниже, пытаясь переместить данные в структуру JSON с массивом. В следующем коде "M" - массив, который может быть добавлен, x - целочисленное значение. Я пытаюсь поместить несколько записей в массив "P" с помощью push, но я получаю следующую ошибку:
Uncaught TypeError: Не удается прочитать свойство "push" неопределенного
var x = 3;
var title = "A Title"
var JSON_local_dat = {"M":[{"T":title, "P":[]}]};
for(var i=0; i < x; i++)
{
var d = {"Something": 50};
JSON_local_dat.M.P.push(d);
console.log(JSON.stringify(JSON_local_dat.M.P));
}
Я также попытался удалить двойные кавычки, но я получаю ту же ошибку. Если я вместо этого попытаюсь вставить данные в "M", это будет успешным, но не "P". Не могу понять, почему он не должен делать то же самое для P, где я хочу, чтобы данные шли.
(BTW Я использую одиночные буквы в качестве имен, потому что пространство жесткое, API, который я использую для передачи данных, ограничивает меня до 4000 символов.)
Чтобы исправить свой код, используйте M[0]
с его массивом.
JSON_local_dat.M[0].P.push(d);
M
- это массив. Используйте M[0]
чтобы получить первую запись в массиве, которая здесь является объектом с свойством P
x = 3;
var JSON_local_dat = {"M":[{"T":"title", "P":[]}]};
for(var i=0; i < x; i++)
{
var d = {"Something": 50};
JSON_local_dat.M[0].P.push(d);
console.log(JSON.stringify(JSON_local_dat.M[0].P));
}
P
является свойством первого объекта в массиве M
, а не самого M
Вам нужно выбрать первый элемент массива, чтобы добраться до объекта (а не самого массива), чтобы получить доступ к P
:
var x = 3;
var title = "A Title"
var JSON_local_dat = {"M":[{"T":title, "P":[]}]};
for(var i=0; i < x; i++)
{
var d = {"Something": 50};
JSON_local_dat.M[0].P.push(d);
}
console.log(JSON.stringify(JSON_local_dat.M));
Если вы хотите сделать его более эффективным, вы можете выбрать массив P
только один раз, а не на каждой итерации:
var x = 3;
var title = "A Title"
var P = [];
var JSON_local_dat = {"M":[{"T":title, P}]};
for(var i=0; i < x; i++)
{
var d = {"Something": 50};
P.push(d);
}
console.log(JSON.stringify(JSON_local_dat.M));
Кроме того, у вас нет JSON - у вас просто простой Javascript-объект. См. Нет такой вещи, как "Объект JSON",
Ваш json (JSON_local_dat) не создается так, как вы хотите. вы заставили M быть массивом (его первый элемент имеет свойство P). изменить на -
var JSON_local_dat = {"M":{"T":title, "P":[]}};