Имя: Пароль:
1C
 
Как прочитать массив в 1С если он в формате JSON?
,
0 23th
 
19.03.20
07:47
У меня через браузер вылазит такой массив:

[
{

"izmer": "ОС",
"resurs": "Да"},
{
"izmer": "Материал",
"resurs": "Да"
},
{....... и так далее


Я его считываю через 1С:

Джисон = ОтветHTTP.ПолучитьТелоКакСтроку();
    
    ЧтениеДЖ = Новый ЧтениеJSON;
    ЧтениеДЖ.УстановитьСтроку(Джисон);
    МассивДжи = ПрочитатьJSON(ЧтениеДЖ);

И он не может прочитать JSON

Когда передаю не массив а структуру то все считывает как в учебниках.
Пробожал
ЧтениеДжи.Прочитать() тоже не получилось или я не там смотрел может быть

Подскажите каким методом считывать Массив?
1 sitex
 
naïve
19.03.20
07:58
(0) Нажми букву красную Я. там ответов тьма.
2 Бизон
 
19.03.20
08:02
так у тебя же массив структур
3 23th
 
19.03.20
08:07
(2) да да у меня получается массив структур, я вот сижу не могу понять как их перебрать...
4 23th
 
19.03.20
08:08
(1)

тЧтение = Новый ЧтениеJSON;
   тЧтение.ОткрытьФайл("C:\test.json");
   тДанные = ПрочитатьJSON(тЧтение, Ложь);

Выдала ссылка из кнопки "Я", но это ж то же самое что и я написал выше
5 Мимохожий Однако
 
19.03.20
08:12
(3) Для каждого СтрутураТекущая Из МассивСтруктур Цикл
6 arsik
 
гуру
19.03.20
08:39
Если тебе нужно из 1С в 1С то проще сериализировать

Функция СериализироватьВДжейсон(Данные) Экспорт
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьJSON(Запись, Данные, НазначениеТипаXML.Явное);
    Возврат Запись.Закрыть();
КонецФункции

Функция ДесериализироватьИзДжейсон(СтрокаДжейсон) Экспорт
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаДжейсон);
    Данные = СериализаторXDTO.ПрочитатьJSON(Чтение);
    Чтение.Закрыть();    
    Возврат Данные;
КонецФункции

//На отправителе
Функция ОтправитьЗаказЧерезВеб(Заказ, УдалитьИзОбменаИсточника = Истина, УдалитьИзОбменаПриемника = Истина) Экспорт
    стрВеб = кцРаботаСИнтернет.ПолучитьВебСоединение(Справочники.НастройкиПодключенияКБазамДанных.ОбменДаннымиОперативная);
    
    Данные = Новый Структура;
    Данные.Вставить("КодУзлаИсточника",СокрЛП(ПланыОбмена.ОсновнойПланОбмена.ЭтотУзел().Код)); //Передаем код узла источника
    Данные.Вставить("УдалитьИзОбменаПриемника",УдалитьИзОбменаПриемника);
    Данные.Вставить("Заказ",Заказ.ПолучитьОбъект());
    
    вебЗапрос = Новый HTTPЗапрос(стрВеб.Линк+"order");
    вебЗапрос.УстановитьТелоИзСтроки(СериализироватьВДжейсон(Данные));
    вебОтвет = стрВеб.Соединение.ОтправитьДляОбработки(вебЗапрос);
    
    //Уничтожим соединение
    стрВеб.Соединение = Неопределено;
    стрВеб = Неопределено;
КонецФункции

//На получателе
Функция ЗаказПокупателяОтправить(Запрос)
    стрОтвет = Новый Структура("ЕстьОшибки,ОписаниеОшибки",Ложь,"");
    
    Данные = кцРаботаСИнтернет.ДесериализироватьИзДжейсон(Запрос.ПолучитьТелоКакСтроку());
    
    Если ТипЗнч(Данные) <> Тип("Структура") Тогда
        стрОтвет.ЕстьОшибки = Истина;
        стрОтвет.ОписаниеОшибки = "Во входящих данных ожидалось: Структура";
    иначе
        ЗаполнитьЗначенияСвойств(стрОтвет,ОбменДаннымиСервер.ОбработатьПакетДанныхЗаказ(Данные));
    КонецЕсли;
    
        
    Ответ = Новый HTTPСервисОтвет(?(стрОтвет.ЕстьОшибки,500,200));
    Ответ.УстановитьТелоИзСтроки(кцРаботаСИнтернет.СериализироватьВДжейсон(стрОтвет));
    
    Возврат Ответ;
КонецФункции
7 23th
 
19.03.20
09:17
ЧтениеДЖ = Новый ЧтениеJSON;
    ЧтениеДЖ.УстановитьСтроку(Джисон);
    МассивДжи = ПрочитатьJSON(ЧтениеДЖ, ЛОЖЬ);
    
    Для каждого Структура из МассивДжи цикл
        
        Тек = Структура.Kod;
        Bvz = Структура.Imy;

    КонецЦикла;


Не читает, в массиве пустота как в моей голове!
8 arsik
 
гуру
19.03.20
09:23
(7) Ну может в полученной строке у тебя всякие символы левые, которые нужно экранировать или еще какая бяка. Получи тело как двоичные данные и выложи, посмотрим.
9 Галахад
 
гуру
19.03.20
09:23
(7) Ты откуда-то получаешь готовый json? И не можешь сделать так чтобы его делали по-другому?
10 tan76
 
19.03.20
09:26
Вот не поленился и проверил:


    Джисон = "[  {    ""izmer"": ""ОС"",    ""resurs"": ""Да""  },  {    ""izmer"": ""Материал"",    ""resurs"": ""Да""  }]";
    
    ЧтениеДЖ = Новый ЧтениеJSON;
    ЧтениеДЖ.УстановитьСтроку(Джисон);
    МассивДжи = ПрочитатьJSON(ЧтениеДЖ, Истина);


на выходе массив.

На всякий случай установи в ПрочитатьJSON второй параметр "Истина", возможно прочитать не может потому что в структуру не может значения завернуть.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой