Поле объекта не обнаружено (http, json)

1. user2101457 16.08.24 16:12 Сейчас в теме
Добрый день! Столкнулся с задачей - поднять http-сервис на стороне 1с, соединение установлено, но вот не могу разобраться с обработкой вложенного json.
Сам json:
items = {
    "item1": {
        "Артикул": "5051",
        "Количество": "2",
        "Цена": "599"
    },
    "item2": {
        "Артикул": "6052",
        "Количество": "1",
        "Цена": "369"
    }
}
Показать


На стороне 1С все это дело принимает такая функция:
Функция ТестДжейсонТоварыМетод1(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
	Данные = ПрочитатьJSON(ЧтениеJSON);
	Имя = Данные.Имя;
	Телефон = Данные.Телефон;
	Товары = Данные.Товары;
	ЧтениеJSON.Закрыть();
	
	Результат = "";
	Для Каждого Товар из Товары Цикл
		Артикул = Товар["Артикул"];
		Количество = Товар["Количество"];
		Цена = Товар["Цена"];
		Результат = Результат + "Артикул: " + Артикул + " Количество: " + Количество + " Цена: " + Цена;
	КонецЦикла;
	Ответ.УстановитьТелоИзСтроки(Результат);
	Возврат Ответ
Показать


Насколько я понял (а с 1с я впервые честно говоря сталкиваюсь), то переменная "Товары = Данные.Товары;) это структура. Из того, что вычитал, я могу к значениям обратиться по ключам. Вот я пытаюсь это делать, но в ответ получаю "Поле объекта не обнаружено (Артикул)".
Пытался разными способами достучаться, не получается, второй день сижу.
ps. Прошу строго не судить, я скорее любитель и пытаюсь автоматизировать свою рутину по основной работе.
Спасибо заранее.
По теме из базы знаний
Найденные решения
8. Sashares 35 16.08.24 17:29 Сейчас в теме
(6) Для Каждого Товар из Товары Цикл
Артикул = Товар.Значение["Артикул"];
Количество = Товар.Значение["Количество"];
Цена = Товар.Значение["Цена"];
Результат = Результат + "Артикул: " + Артикул + " Количество: " + Количество + " Цена: " + Цена;
КонецЦикла;
user2101457; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 16.08.24 16:16 Сейчас в теме
Это массив. Элементами которого являются структуры.
3. user2101457 16.08.24 16:23 Сейчас в теме
(2) Спасибо за ответ. Но вот что я вижу, если просто вернуть Товары как есть - говорит, возвращается структура.
	Товары = Данные.Товары;
	ЧтениеJSON.Закрыть();
	
	Результат = "Товары: " + Товары;


В какую сторону копать, как это дело обрабатывать - вообще без понятия.
Прикрепленные файлы:
4. vadim.semyonov.rzn 16.08.24 16:40 Сейчас в теме
(2) Приложенная джинса - ни разу не массив, а структура из структур. Структуру можно обойти примерно так:
Для Каждого Элемент из Товары Цикл 
	Сообщить(Элемент.Ключ + ": " + Элемент.Значение); 
КонецЦикла;
6. user2101457 16.08.24 17:18 Сейчас в теме
(4) Спасибо. В моем случае мне надо еще в один цикл заходить, иначе функция возвращает
"item1: Структура".
А нельзя ли как-то обращаться к значениям по ключу? Иначе я не могу понять, как мне потом присваиваться Артикул, Цену, Количество...Функция просто их перебирает подряд.
7. Zevzm 16.08.24 17:28 Сейчас в теме
(6) Проверяй наличие ключа через метод .Свойство(,)
8. Sashares 35 16.08.24 17:29 Сейчас в теме
(6) Для Каждого Товар из Товары Цикл
Артикул = Товар.Значение["Артикул"];
Количество = Товар.Значение["Количество"];
Цена = Товар.Значение["Цена"];
Результат = Результат + "Артикул: " + Артикул + " Количество: " + Количество + " Цена: " + Цена;
КонецЦикла;
user2101457; +1 Ответить
9. user2101457 16.08.24 17:47 Сейчас в теме
(8)
овар.Значение["Количество"];

Вау, работает. Спасибо вам и всем, кто откликнулся!
5. Sashares 35 16.08.24 16:45 Сейчас в теме
(2) Массив это же квадратные скобки
Оставьте свое сообщение

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