Массив - структура - массив затирает массивы в цикле

1. BARDER 37 01.05.21 08:48 Сейчас в теме
Столкнулся с такой проблемой
Есть процедура которая перебирает данные и формирует 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": 1
    }
   ]
  },
  {
   "stocks": [
    {
     "chrtId": 2
    }
   ]
  }
 ]
}
Показать
По теме из базы знаний
Найденные решения
3. spacecraft 01.05.21 09:24 Сейчас в теме
(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.Закрыть();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 01.05.21 09:07 Сейчас в теме
(1)
МассивStoks = Новый Массив;

он определен в двух местах.
Или скорее всего, переименовать (вложенный в цикл) и правильно распределить по массивам. Судя по задаче именно это требуется.

Еще, вот эта конструкция "ч=ч+1; " внутри цикла Для, зачем? Она увеличивает итератор цикла, который и так увеличивается. Получается двойное увеличение.
3. spacecraft 01.05.21 09:24 Сейчас в теме
(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.Закрыть();
Показать
5. BARDER 37 01.05.21 11:17 Сейчас в теме
(3) если внутри цикла оставляю ничего не меняется, а если вне цикла выношу то получаю задвой:

{
"token": "ТОКЕН",
"data": [
{
"stocks": [
{
"chrtId": 1
},
{
"chrtId": 2
}
]
},
{
"stocks": [
{
"chrtId": 1
},
{
"chrtId": 2
}
]
}
]
}
Показать
6. spacecraft 01.05.21 11:19 Сейчас в теме
(5) полностью свой код замените на мой.
Если сравните свой код и мой, то можете заметить, что
СтруктураДанныхJSON = Новый Структура;
перенес внутрь цикла. Нужно внутри цикла создавать структуру, чтобы она не перезаписывалась.
4. Xershi 1484 01.05.21 11:04 Сейчас в теме
Если вы сделали структуру добавили в массив, а затем в цикле её перезаполняете, то получите одну последнюю структуру.
Функции копирования структуры нет, нужно создавать новую и перезаполнять, если внутри есть структура тоже самое и для неё нужно.
7. BARDER 37 01.05.21 11:19 Сейчас в теме
(4) несколько раз перечитал, не могу сооброзить и понять что нужно)
8. Xershi 1484 01.05.21 11:46 Сейчас в теме
(7) ну если у вас проблема заполнения одинаковыми значениями, то написал как это решается.
9. Sakuraso 01.05.21 13:51 Сейчас в теме
(7)структуру JSON необходимо создавать в цикле, иначе получается вы вне цикла создали структуру и в нее добавили элемент с ключом stoks, далее в цикле эту структуру уже перезаполняете по тому же ключу stoks вот и получается что остается только один элемент структуры. А так как ключ один и тот же "stoks", то новый элемент структуры не создается, перезаписывается текущий элемент.
user1600441; user1592156; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот