Неправильная запись JSON

1. user1757315 25.04.24 15:09 Сейчас в теме
Всех приветствую, столкнулся со следующей проблемой:
Упаковываю данные в json файл через структуру, указываю свои ключи и значения по справочникам, однако на выходе получается несуразица, по типу:
{,
"productName": ,
"Шкаф мед. металл. двухсекц. двухдверный ШМ-04-МСК (нерж.сталь) МСК-5647.01 (700х320х1175)",
"articul": ,
"",
"package": ,
"шт",
"vid": ,
"Товары",
"nds": ,
"Без НДС"
},
{,
"productName": ,
"Банкетка БЛ-МСК (со спинкой, 1500х480х830, МСК-208)",
"articul": ,
"",
"package": ,
"шт",
"vid": ,
"Товары",
"nds": ,
"Без НДС"
}


Функция Создатьjson()
	
	ЗаписьДж = Новый ЗаписьJSON();
	
	ЗаписьДж.ПроверятьСтруктуру = Ложь;
	
	ПараметрыЗаписиДж = Новый ПараметрыЗаписиJSON( , Символы.Таб);
	
	ЗаписьДж.ОткрытьФайл("C:\ФайлВыгрузки.json",,,ПараметрыЗаписиДж);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Номенклатура.Наименование КАК Наименование,
	|	Номенклатура.Артикул КАК Артикул,
	|	Номенклатура.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмеренияНаименование,
	|	Номенклатура.ВидНоменклатуры.Наименование КАК ВидНоменклатурыНаименование,
	|	Номенклатура.Ссылка КАК Ссылка,
	|	Номенклатура.СтавкаНДС.Наименование КАК СтавкаНДСНаименование
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Структура1 = новый Структура;
		
		Структура1.Вставить("productName" , Строка(ВыборкаДетальныеЗаписи.Наименование));
		
		Если Не ВыборкаДетальныеЗаписи.Артикул = Null Тогда
			
			Структура1.Вставить("articul" , Строка(ВыборкаДетальныеЗаписи.Артикул));
			
		КонецЕсли;
		
		Если Не ВыборкаДетальныеЗаписи.ЕдиницаИзмеренияНаименование = Null Тогда
			
			Структура1.Вставить("package" , Строка(ВыборкаДетальныеЗаписи.ЕдиницаИзмеренияНаименование));
			
		КонецЕсли;
		
		Если Не ВыборкаДетальныеЗаписи.ВидНоменклатурыНаименование = Null Тогда
			
			Структура1.Вставить("vid" , Строка(ВыборкаДетальныеЗаписи.ВидНоменклатурыНаименование));
			
		КонецЕсли;
		
		Если Не ВыборкаДетальныеЗаписи.СтавкаНДСНаименование = Null Тогда
			
			Структура1.Вставить("nds" , Строка(ВыборкаДетальныеЗаписи.СтавкаНДСНаименование));
			
		КонецЕсли;
		
		Запрос1 = Новый Запрос;
		Запрос1.Текст = 
		"ВЫБРАТЬ
		|	ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК НоменклатураСсылка,
		|	ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
		|	ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
		|ГДЕ
		|	ТоварыНаСкладахОстатки.Номенклатура.Ссылка = &Ссылка";
		
		Запрос1.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи.Ссылка);
		
		РезультатЗапроса1 = Запрос1.Выполнить();
		
		ВыборкаДетальныеЗаписи1 = РезультатЗапроса1.Выбрать();
		
		Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
			
			Если Не ВыборкаДетальныеЗаписи1.ВНаличииОстаток = Null Тогда
				
				Структура1.Вставить("Ostatok" , Строка(ВыборкаДетальныеЗаписи1.ВНаличииОстаток));
				
			КонецЕсли;
			
			Если Не ВыборкаДетальныеЗаписи1.СкладНаименование = Null Тогда
				
				Структура1.Вставить("sklad" , Строка(ВыборкаДетальныеЗаписи1.СкладНаименование));
				
			КонецЕсли;
			
		КонецЦикла;
		
		Запрос2 = Новый Запрос;
		Запрос2.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
		|	ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование КАК ВидЦеныНаименование,
		|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
		|	ЦеныНоменклатурыСрезПоследних.Валюта.Наименование КАК ВалютаНаименование
		|ИЗ
		|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
		|ГДЕ
		|	ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = &Ссылка
		|
		|УПОРЯДОЧИТЬ ПО
		|	ЦеныНоменклатурыСрезПоследних.Период УБЫВ";
		
		Запрос2.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи.Ссылка);
		
		РезультатЗапроса2 = Запрос2.Выполнить();
		
		ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать();
		
		Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
			
			Если Не ВыборкаДетальныеЗаписи2.Цена = Null Тогда
				
				Структура1.Вставить("price" , Строка(ВыборкаДетальныеЗаписи2.Цена));
				
			КонецЕсли;
			
			Если Не ВыборкаДетальныеЗаписи2.ВидЦеныНаименование = Null Тогда
				
				Структура1.Вставить("vidPrice" , Строка(ВыборкаДетальныеЗаписи2.ВидЦеныНаименование));
				
			КонецЕсли;
			
			Если Не ВыборкаДетальныеЗаписи2.ВалютаНаименование = Null Тогда
				
				Структура1.Вставить("Valuta" , Строка(ВыборкаДетальныеЗаписи2.ВалютаНаименование));
				
			КонецЕсли;
			
		КонецЦикла;
		
		ЗаписатьJSON(ЗаписьДж, Структура1);
		
	КонецЦикла;
	
	ЗаписьДж.Закрыть();
	
КонецФункции
Показать


Кто может помочь?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 25.04.24 15:22 Сейчас в теме
(1)ПараметрыЗаписиJSON вообще уберите.
user1757315; +1 Ответить
3. user1757315 25.04.24 15:56 Сейчас в теме
(2)Благодарю, убрал параметры, но проблема не в этом.
4. user1757315 25.04.24 16:03 Сейчас в теме
(1)Добавлю, первая запись происходит хорошо, но после нее идет, как на скрине.

{
"productName": "Оборудование (объекты основных средств)",
"code": "00-00000004"
},
{,
"productName": ,
"Оборудование к установке",
"code": ,
"00-00000005"
},
5. nomad_irk 76 25.04.24 16:17 Сейчас в теме
(4) Я бы сделал так:

.....
РезультатЗапроса = Запрос.Выполнить();
    
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Данные = Новый Массив;
    
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     ..........
     Данные.Добавить(Структура1);
КонецЦикла;

ЗаписатьJSON(ЗаписьДж, Данные);
Показать
6. user1880116 25.04.24 22:06 Сейчас в теме
(4) Дай-ка, я догадаюсь...
При записи второго элемента у тебя вывалилось исключение в котором что-то говорилось про структуру json, ты ничего не понял, решил заглушить проверку при помощи
ЗаписьДж.ПроверятьСтруктуру = Ложь;
и теперь удивляешсья, что у тебя json битый. Так дело было?
8. user1757315 26.04.24 15:46 Сейчас в теме
(6)На самом деле я всегда использовал "Ложь" и получал на выходе нормальный json, но видимо стоит поставить "Истина" и посмотреть на результат, спасибо за подсказку.
7. user1880116 25.04.24 22:18 Сейчас в теме
(1) Какую структуру json ты вообще хочешь получить на выходе?
9. user1757315 26.04.24 15:49 Сейчас в теме
(7)Как при первой записи:
{
"productName": "Оборудование (объекты основных средств)",
"code": "00-00000004"
},
Но с соответствующим количеством данных для каждой номенклатуры.
10. user1880116 26.04.24 15:59 Сейчас в теме
(9) Ты хочешь неправильного json. Оно на самом верхнем уровне должно быть или объектом или массивом. Попробуй что-то вроде
ЗаписьДж.ЗаписатьНачалоМассива();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
...
КонецЦикла;

ЗаписьДж.ЗаписатьКонецМассива();
ЗаписьДж.Закрыть();
Показать
Оставьте свое сообщение

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