Заполнить справочник 1с данными из JSON
У меня есть результат запроса в формате 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"}}
{"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"}}
По теме из базы знаний
Найденные решения
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСервера);
Попытка
Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;
Полученную структуру или соответсвие разбираете и заполняете свой справочник
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСервера);
Попытка
Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;
Полученную структуру или соответсвие разбираете и заполняете свой справочник
(2) Лишнюю строчку из исключения удалите, не вводите новичков в заблуждение )))
Попытка
Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;
Результат= ПрочитатьJSON(ЧтениеJSON, Ложь);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Результат= ПрочитатьJSON(ЧтениеJSON, Истина);
КонецПопытки;
(6) Ну упадет с исключением, и вы этого не предусмотрели, в отличие от структуры. И ошибки не выдали, в отличие от структуры. Ваше решение половинчатое, а посему недопустимое.
Если и в соответсвие не залетит значит это не JSON
Неверное утверждение. Это вполне себе может быть и джейсон, но не поддерживаемый сериализатором 1С.
ОК
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку("{""task"":""1400""}");
Результат = "";
ОшибкаЧтенияВСтруктуру = "";
ОшибкаЧтенияВСоответствие = "";
Попытка
Результат = ПрочитатьJSON(ЧтениеJSON, Ложь); //Попытка чтения в Структуру
Исключение
ОшибкаЧтенияВСтруктуру = СтрШаблон("Ошибка чтения в структуру:%1", ОписаниеОшибки());
КонецПопытки;
Если не ЗначениеЗаполнено(Результат) Тогда
Попытка
Результат = ПрочитатьJSON(ЧтениеJSON, Истина); //Попытка чтения в Соответствие
Исключение
ОшибкаЧтенияВСоответствие = СтрШаблон("Ошибка чтения в соответсвие:%1", ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если ТипЗнч(Результат) <> Тип("Строка") Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрШаблон("JSON прочитан в переменную ""Результат"" и имеет тип %1.
|%2
|%3", Строка(ТипЗнч(Результат)),ОшибкаЧтенияВСтруктуру, ОшибкаЧтенияВСоответствие));
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Чтение JSON не удалось!
|%1
|%2", ОшибкаЧтенияВСтруктуру, ОшибкаЧтенияВСоответствие);
КонецЕсли;
Показать
(11) это понятно
я к тому, что автору нужно не надеяться, что ПрочитатьJSON() ему вернет удобоваримый ответ
и тот же task_id надо будет вытаскивать из вложенной во вложенную структуру result
что может у новичков вызвать затруднения
помнится я для своего случая специально задавал заранее описание всех соответствий структур и подсовывал потом нужное для читаемого уровня, но для этого нужно знание протокола обмена и автору повезет если вторая сторона его имеет
мне в тот раз не повезло и все делалось методом научного тыка, благо заказчик был адекватный и пояснял что к чему надо относить при разборе данных
я к тому, что автору нужно не надеяться, что ПрочитатьJSON() ему вернет удобоваримый ответ
и тот же task_id надо будет вытаскивать из вложенной во вложенную структуру result
что может у новичков вызвать затруднения
помнится я для своего случая специально задавал заранее описание всех соответствий структур и подсовывал потом нужное для читаемого уровня, но для этого нужно знание протокола обмена и автору повезет если вторая сторона его имеет
мне в тот раз не повезло и все делалось методом научного тыка, благо заказчик был адекватный и пояснял что к чему надо относить при разборе данных
Пример заполнения одноименных полей Объекта из данных JSON прочитанных в Соответствие
Процедура ЗаполнитьОдноименныеРеквизитыПримитивныхТипов(ВходныеПараметры, ОбъектЗаполнения, Данные)
Для каждого Реквизит Из ОбъектЗаполнения.Метаданные().Реквизиты Цикл
Если ВходныеПараметры.Свойство("ИсключаемыеРеквизитыИнициализации") Тогда
Если ВходныеПараметры.ИсключаемыеРеквизитыИнициализации.Найти(Реквизит.Имя) <> Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(ОбъектЗаполнения) и
(Данные.Получить("IsFolder") = ИСТИНА или Данные.Получить("IsFolder") = 1) тогда
Если ОбъектЗаполнения.Метаданные().Реквизиты[Реквизит.Имя].Использование =
Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ТипРеквизита = Реквизит.Тип.Типы()[0];
Если НЕ ОбщегоНазначения.ЭтоСсылка(ТипРеквизита) Тогда
ЭлементДанных = Данные.Получить(Реквизит.Имя);
Если ЭлементДанных <> Неопределено Тогда
Если ТипРеквизита = Тип("Дата") Тогда
Попытка
ОбъектЗаполнения[Реквизит.Имя] = ПрочитатьДатуJSON(ЭлементДанных, ФорматДатыJSON.ISO);
Исключение
//ОписаниеОшибки()
КонецПопытки;
ИначеЕсли ТипРеквизита = ТипЗнч(ЭлементДанных) Тогда
ОбъектЗаполнения[Реквизит.Имя] = ЭлементДанных;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот