Массив - структура - массив затирает массивы в цикле
Столкнулся с такой проблемой
Есть процедура которая перебирает данные и формирует JSON строку но есть нюанс, он затирает массив который был в структуре уже и вставляет новые данные.
Получаю результат:
а должен быть:
Есть процедура которая перебирает данные и формирует JSON строку но есть нюанс, он затирает массив который был в структуре уже и вставляет новые данные.
Процедура Команда1(Команда)
//Параметры JSON
ЗаписьJSON = Новый ЗаписьJSON;
тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
ЗаписьJSON.УстановитьСтроку(тПараметрыJSON);
МассивДанныхJSON = Новый Массив;
СтруктураДанныхJSON = Новый Структура;
СтруктураДанные = Новый Структура;
СтруктураДанные.Вставить("token", "ТОКЕН");
МассивStoks = Новый Массив;
chrtid = 1;
nmid = 1;
ч=1;
Для ч = 1 По 4 Цикл
МассивStoks = Новый Массив;
тДанные = Новый Структура;
тДанные.Вставить("chrtId", chrtid);
МассивStoks.Добавить(тДанные);
СтруктураДанныхJSON.Вставить("stocks", МассивStoks);
МассивДанныхJSON.Добавить(СтруктураДанныхJSON);
ч=ч+1;
chrtid = chrtid+1;
КонецЦикла;
Сообщить(МассивДанныхJSON);
СтруктураДанные.Вставить("data", МассивДанныхJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураДанные);
СтрокаJS = ЗаписьJSON.Закрыть();
х=1;
КонецПроцедуры
ПоказатьПолучаю результат:
{
"token": "ТОКЕН",
"data": [
{
"stocks": [
{
"chrtId": 2
}
]
},
{
"stocks": [
{
"chrtId": 2
}
]
}
]
}
Показать"token": "ТОКЕН",
"data": [
{
"stocks": [
{
"chrtId": 2
}
]
},
{
"stocks": [
{
"chrtId": 2
}
]
}
]
}
а должен быть:
{
"token": "ТОКЕН",
"data": [
{
"stocks": [
{
"chrtId": 1
}
]
},
{
"stocks": [
{
"chrtId": 2
}
]
}
]
}
ПоказатьПо теме из базы знаний
Найденные решения
(1) вот так должно быть:
ЗаписьJSON = Новый ЗаписьJSON;
тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
ЗаписьJSON.УстановитьСтроку(тПараметрыJSON);
МассивДанныхJSON = Новый Массив;
СтруктураДанные = Новый Структура;
СтруктураДанные.Вставить("token", "ТОКЕН");
chrtid = 1;
Для ч = 1 По 4 Цикл
МассивStoks = Новый Массив;
тДанные = Новый Структура;
тДанные.Вставить("chrtId", chrtid);
МассивStoks.Добавить(тДанные);
СтруктураДанныхJSON = Новый Структура;
СтруктураДанныхJSON.Вставить("stocks", МассивStoks);
МассивДанныхJSON.Добавить(СтруктураДанныхJSON);
//ч=ч+1;
chrtid = chrtid+1;
КонецЦикла;
Сообщить(МассивДанныхJSON);
СтруктураДанные.Вставить("data", МассивДанныхJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураДанные);
СтрокаJS = ЗаписьJSON.Закрыть();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
он определен в двух местах.
Или скорее всего, переименовать (вложенный в цикл) и правильно распределить по массивам. Судя по задаче именно это требуется.
Еще, вот эта конструкция "ч=ч+1; " внутри цикла Для, зачем? Она увеличивает итератор цикла, который и так увеличивается. Получается двойное увеличение.
МассивStoks = Новый Массив;
он определен в двух местах.
Или скорее всего, переименовать (вложенный в цикл) и правильно распределить по массивам. Судя по задаче именно это требуется.
Еще, вот эта конструкция "ч=ч+1; " внутри цикла Для, зачем? Она увеличивает итератор цикла, который и так увеличивается. Получается двойное увеличение.
(1) вот так должно быть:
ЗаписьJSON = Новый ЗаписьJSON;
тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
ЗаписьJSON.УстановитьСтроку(тПараметрыJSON);
МассивДанныхJSON = Новый Массив;
СтруктураДанные = Новый Структура;
СтруктураДанные.Вставить("token", "ТОКЕН");
chrtid = 1;
Для ч = 1 По 4 Цикл
МассивStoks = Новый Массив;
тДанные = Новый Структура;
тДанные.Вставить("chrtId", chrtid);
МассивStoks.Добавить(тДанные);
СтруктураДанныхJSON = Новый Структура;
СтруктураДанныхJSON.Вставить("stocks", МассивStoks);
МассивДанныхJSON.Добавить(СтруктураДанныхJSON);
//ч=ч+1;
chrtid = chrtid+1;
КонецЦикла;
Сообщить(МассивДанныхJSON);
СтруктураДанные.Вставить("data", МассивДанныхJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураДанные);
СтрокаJS = ЗаписьJSON.Закрыть();
Показать
Если вы сделали структуру добавили в массив, а затем в цикле её перезаполняете, то получите одну последнюю структуру.
Функции копирования структуры нет, нужно создавать новую и перезаполнять, если внутри есть структура тоже самое и для неё нужно.
Функции копирования структуры нет, нужно создавать новую и перезаполнять, если внутри есть структура тоже самое и для неё нужно.
(7)структуру JSON необходимо создавать в цикле, иначе получается вы вне цикла создали структуру и в нее добавили элемент с ключом stoks, далее в цикле эту структуру уже перезаполняете по тому же ключу stoks вот и получается что остается только один элемент структуры. А так как ключ один и тот же "stoks", то новый элемент структуры не создается, перезаписывается текущий элемент.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот