Заполнить справочник 1с данными из JSON

1. val_ka 03.11.20 10:02 Сейчас в теме
У меня есть результат запроса в формате JSON. Теперь эти данные мне необходимо записать в справочник 1С. Я новичок, подскажите как это делается.


{"result":{"task":{"id":"1400","title":"\u0414\u0436\u0435\u043c","createdDate":"2020-10-15T16:20:11+07:00","closedDate":"2020-10-23T10:06:16+07:00","favorite":"N","descriptionInBbcode":"Y",
"ufCrmTask":["L_672"], "action":"accept":false,"decline":false,"complete":false,"approve":false,"disapprove":false,"start":false,"pause":false,"delegate":false,
"remove":true,"edit":true,"defer":false,"renew":true,"create":true,"changeDeadline":true,"checklistAddItems":true,"addFavorite":true,"deleteFavorite":false,"rate":true,"edit.originator":true,"checklist.reorder":true,"elapsedtime.add":true,"dayplan.timer.toggle":false,"edit.plan":true,"checklist.add":true,"favorite.add":true,"favorite.delete":false}}},
"time":{"start":1604386756.3573911,"finish":1604386756.4045651,"duration":0.047173976898193359,"processing":0.022566080093383789,"date_start":"2020-11-03T09:59:16+03:00","date_finish":"2020-11-03T09:59:16+03:00"}}
По теме из базы знаний
Найденные решения
2. Pryanishnikov_Vladimir 03.11.20 10:48 Сейчас в теме
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСервера);
Попытка
	Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);	
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
        Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;



Полученную структуру или соответсвие разбираете и заполняете свой справочник
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Pryanishnikov_Vladimir 03.11.20 10:48 Сейчас в теме
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСервера);
Попытка
	Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);	
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
        Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;



Полученную структуру или соответсвие разбираете и заполняете свой справочник
3. FatPanzer 03.11.20 10:50 Сейчас в теме
(2) Лишнюю строчку из исключения удалите, не вводите новичков в заблуждение )))
Попытка
Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;
4. Pryanishnikov_Vladimir 03.11.20 10:51 Сейчас в теме
(3)А "лишняя" это с описанием ошибки?
5. FatPanzer 03.11.20 10:53 Сейчас в теме
(4) Лишняя - это с попыткой преобразования в соответствие. Поскольку она тоже может не сработать и выдать ошибку. Либо делайте еще одну попытку, если не получилось прочитать в структуру.
6. Pryanishnikov_Vladimir 03.11.20 10:54 Сейчас в теме
(5)Если и в соответсвие не залетит значит это не JSON
8. FatPanzer 03.11.20 11:01 Сейчас в теме
(6) Ну упадет с исключением, и вы этого не предусмотрели, в отличие от структуры. И ошибки не выдали, в отличие от структуры. Ваше решение половинчатое, а посему недопустимое.

Если и в соответсвие не залетит значит это не JSON
Неверное утверждение. Это вполне себе может быть и джейсон, но не поддерживаемый сериализатором 1С.
17. Pryanishnikov_Vladimir 03.11.20 11:22 Сейчас в теме
ОК
ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку("{""task"":""1400""}");
	
	Результат = "";
	ОшибкаЧтенияВСтруктуру = "";
	ОшибкаЧтенияВСоответствие = "";
	
	Попытка
		Результат = ПрочитатьJSON(ЧтениеJSON, Ложь); //Попытка чтения в Структуру   
	Исключение  
		ОшибкаЧтенияВСтруктуру = СтрШаблон("Ошибка чтения в структуру:%1", ОписаниеОшибки());
	КонецПопытки;
	
	Если не ЗначениеЗаполнено(Результат) Тогда
		
		Попытка
			Результат = ПрочитатьJSON(ЧтениеJSON, Истина); //Попытка чтения в Соответствие
		Исключение
			ОшибкаЧтенияВСоответствие = СтрШаблон("Ошибка чтения в соответсвие:%1", ОписаниеОшибки());     
		КонецПопытки;
		
	КонецЕсли;
	
	Если ТипЗнч(Результат) <> Тип("Строка") Тогда
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрШаблон("JSON прочитан в переменную ""Результат"" и имеет тип %1.
		|%2
		|%3", Строка(ТипЗнч(Результат)),ОшибкаЧтенияВСтруктуру, ОшибкаЧтенияВСоответствие));
	Иначе
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Чтение JSON не удалось!
		|%1
		|%2", ОшибкаЧтенияВСтруктуру, ОшибкаЧтенияВСоответствие);
	КонецЕсли;
Показать
9. val_ka 03.11.20 11:02 Сейчас в теме
(2) эта процедура у меня уже есть. Как разобрать соответствие заполнить справочник?
10. FatPanzer 03.11.20 11:02 Сейчас в теме
(9) А что такое соответствие и как с ним работать - вы уже ознакомились?
12. val_ka 03.11.20 11:05 Сейчас в теме
(10) не знала о таком. пойду изучать. спасибо
7. VictorRGB2 14 03.11.20 11:00 Сейчас в теме
прикольный ответ ))
встречал я такие json
ПрочитатьJSON() его конечно переварит, но получится нечто из структуры в структуре и правильно разобрать ее можно только закодив это дело ручками
11. FatPanzer 03.11.20 11:03 Сейчас в теме
(7) Структура в структуре? Ну собственно говоря, это и есть одна из целей, для которой джейсон и придуман.
13. VictorRGB2 14 03.11.20 11:10 Сейчас в теме
(11) это понятно
я к тому, что автору нужно не надеяться, что ПрочитатьJSON() ему вернет удобоваримый ответ
и тот же task_id надо будет вытаскивать из вложенной во вложенную структуру result
что может у новичков вызвать затруднения

помнится я для своего случая специально задавал заранее описание всех соответствий структур и подсовывал потом нужное для читаемого уровня, но для этого нужно знание протокола обмена и автору повезет если вторая сторона его имеет
мне в тот раз не повезло и все делалось методом научного тыка, благо заказчик был адекватный и пояснял что к чему надо относить при разборе данных
14. FatPanzer 03.11.20 11:12 Сейчас в теме
(13) Угумс. Но раз они договорились именно о таком формате обмена и такой вложенности информации - значит обе стороны знают алгоритм и затруднений это вызвать не должно ;-)
15. val_ka 03.11.20 11:16 Сейчас в теме
(13)
Вы примерно об этом говорите?
Прикрепленные файлы:
16. VictorRGB2 14 03.11.20 11:17 Сейчас в теме
18. Pryanishnikov_Vladimir 03.11.20 11:41 Сейчас в теме
Пример заполнения одноименных полей Объекта из данных JSON прочитанных в Соответствие

Процедура ЗаполнитьОдноименныеРеквизитыПримитивныхТипов(ВходныеПараметры, ОбъектЗаполнения, Данные)
	
	Для каждого Реквизит Из ОбъектЗаполнения.Метаданные().Реквизиты Цикл
		
		Если ВходныеПараметры.Свойство("ИсключаемыеРеквизитыИнициализации") Тогда
			Если ВходныеПараметры.ИсключаемыеРеквизитыИнициализации.Найти(Реквизит.Имя) <> Неопределено Тогда
				Продолжить;
			КонецЕсли;
		КонецЕсли;
		
		Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(ОбъектЗаполнения) и
			(Данные.Получить("IsFolder") = ИСТИНА или Данные.Получить("IsFolder") = 1) тогда
			Если ОбъектЗаполнения.Метаданные().Реквизиты[Реквизит.Имя].Использование =  
				Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента тогда
				Продолжить;
			КонецЕсли;
		КонецЕсли;	
		
		ТипРеквизита = Реквизит.Тип.Типы()[0];
		
		Если НЕ ОбщегоНазначения.ЭтоСсылка(ТипРеквизита) Тогда
			ЭлементДанных = Данные.Получить(Реквизит.Имя);			
			Если ЭлементДанных <> Неопределено  Тогда
				Если ТипРеквизита = Тип("Дата") Тогда
					Попытка
						ОбъектЗаполнения[Реквизит.Имя] = ПрочитатьДатуJSON(ЭлементДанных, ФорматДатыJSON.ISO);
					Исключение
						//ОписаниеОшибки()
					КонецПопытки;
				ИначеЕсли ТипРеквизита = ТипЗнч(ЭлементДанных) Тогда
					ОбъектЗаполнения[Реквизит.Имя] = ЭлементДанных;
				КонецЕсли; 
			КонецЕсли;			
		КонецЕсли; 
		
	КонецЦикла; 
	
КонецПроцедуры
Показать
Оставьте свое сообщение

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