Версия для печати темы (https://pro1c.org.ua/index.php?s=929900d19a4ef495f9150683a0031868&showtopic=61647)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ как ПрочитатьJSON(Чтение) массив объектов (выборку запроса)

Автор: svetas_l 18.09.20, 8:36

добрый день!
такой код выдаёт ошибку "по причине:
Недопустимое состояние потока записи JSON"

  
    Чтение         =    Новый ЧтениеJSON;
    Чтение.ОткрытьФайл(Этаформа.ПутьЧтения+".json");
    Чтение.УстановитьСтроку("{}");
    Джисон = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();

в чем ошибка?
файл
[
{
"Ссылка": "ТОВ \"ДИРЕКТОРІЯ ЗАТИШКУ\"",
"Код": "000000006",
"Наименование": "ТОВ \"ДИРЕКТОРІЯ ЗАТИШКУ\"",
"Префикс": "ДЗ",
"ИНН": "",
"НомерСвидетельства": "",
"КодПоЕДРПОУ": "40769228",
"ФизическоеЛицо": "",
"НаименованиеПолное": "ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ \"ДИРЕКТОРІЯ ЗАТИШКУ\"",
"СвидетельствоСерияНомер": "",
"СвидетельствоДатаВыдачи": "01.01.0001 0:00:00",
"БанковскийСчетПоУмолчанию": "UA653287040000026009054334936 ТОВ \"ДИРЕКТОРІЯ ЗАТИШКУ\"",
"ЮрФизЛицо": "Юр. лицо",
"ТекущийРуководитель": "БЕЗРАДНА СВІТЛАНА ВІКТОРІВНА",
"ТекущаяДолжностьРуководителя": "Директор",
"ТекущийГлавныйБухгалтер": "",
"ТекущийКассир": "",
"ТекущийПаспортист": "",
"ТипОрганизации": "ТОВ",
"УчетнаяЗаписьЭлектроннойПочты": "",
"НазваниеДляСвернутыхУслуг": "",
"ИнформацияПредупреждениеНовойКвитанции": ""
},
{
"Ссылка": "ОК \" ЖБК Морський 1\"",
"Код": "000000001",
"Наименование": "ОК \" ЖБК Морський 1\"",
"Префикс": "МК",
"ИНН": "",
"НомерСвидетельства": "",
"КодПоЕДРПОУ": "39789906",
"ФизическоеЛицо": "",
"НаименованиеПолное": "   Обслуговуючий  Кооператив   \" ЖБК Морський 1\"",
"СвидетельствоСерияНомер": "",
"СвидетельствоДатаВыдачи": "01.01.0001 0:00:00",
"БанковскийСчетПоУмолчанию": "UA583281680000000026003180694",
"ЮрФизЛицо": "Юр. лицо",
"ТекущийРуководитель": "Хапонен Валерий Сергеевич",
"ТекущаяДолжностьРуководителя": "",
"ТекущийГлавныйБухгалтер": "",
"ТекущийКассир": "",
"ТекущийПаспортист": "",
"ТипОрганизации": "Кооператив",
"УчетнаяЗаписьЭлектроннойПочты": "Морской",
"НазваниеДляСвернутыхУслуг": "",
"ИнформацияПредупреждениеНовойКвитанции": ""
},


запись делаю
  ЗаписатьJSON(ЗаписьJSON, Массив_записи);

где Массив_записи
Запрос = Новый Запрос;
    Запрос.Текст =
                "ВЫБРАТЬ *
                 |ИЗ
                | Справочник.Организации КАК Организации
                |";
          Выборка = Запрос.Выполнить().Выбрать();
         Массив_записи =Новый массив;
                                  
     Пока Выборка.Следующий() Цикл

        ОписаниеОбъекта = Новый Структура("Ссылка, Код, Наименование, Префикс,ИНН,НомерСвидетельства,КодПоЕДРПОУ,
ФизическоеЛицо,НаименованиеПолное,СвидетельствоСерияНомер,СвидетельствоДатаВыдачи,
БанковскийСчетПоУмолчанию,ЮрФизЛицо,ТекущийРуководитель,ТекущаяДолжностьРуководителя,
ТекущийГлавныйБухгалтер,ТекущийКассир,ТекущийПаспортист,ТипОрганизации,
УчетнаяЗаписьЭлектроннойПочты,НазваниеДляСвернутыхУслуг,ИнформацияПредупреждениеНовойКвитанции");
        ОписаниеОбъекта.Ссылка = Строка(Выборка.Ссылка);
        ОписаниеОбъекта.Код=Строка(Выборка.Код);
        ОписаниеОбъекта.Наименование=Строка(Выборка.Наименование);
        ОписаниеОбъекта.Префикс=Строка(Выборка.Префикс);
        ОписаниеОбъекта.ИНН=Строка(Выборка.ИНН);
        ОписаниеОбъекта.НомерСвидетельства=Строка(Выборка.НомерСвидетельства);
        ОписаниеОбъекта.КодПоЕДРПОУ=Строка(Выборка.КодПоЕДРПОУ);
        ОписаниеОбъекта.ФизическоеЛицо=Строка(Выборка.ФизическоеЛицо);
        ОписаниеОбъекта.НаименованиеПолное=Строка(Выборка.НаименованиеПолное);
        ОписаниеОбъекта.СвидетельствоСерияНомер=Строка(Выборка.СвидетельствоСерияНомер);
        ОписаниеОбъекта.СвидетельствоДатаВыдачи=Строка(Выборка.СвидетельствоДатаВыдачи);
        ОписаниеОбъекта.БанковскийСчетПоУмолчанию=Строка(Выборка.БанковскийСчетПоУмолчанию);
        ОписаниеОбъекта.ЮрФизЛицо=Строка(Выборка.ЮрФизЛицо);
        ОписаниеОбъекта.ТекущийРуководитель=Строка(Выборка.ТекущийРуководитель);
        ОписаниеОбъекта.ТекущаяДолжностьРуководителя=Строка(Выборка.ТекущаяДолжностьРуководителя);
        ОписаниеОбъекта.ТекущийГлавныйБухгалтер=Строка(Выборка.ТекущийГлавныйБухгалтер);
        ОписаниеОбъекта.ТекущийКассир=Строка(Выборка.ТекущийКассир);
        ОписаниеОбъекта.ТекущийПаспортист=Строка(Выборка.ТекущийПаспортист);
        ОписаниеОбъекта.ТипОрганизации=Строка(Выборка.ТипОрганизации);
        ОписаниеОбъекта.УчетнаяЗаписьЭлектроннойПочты=Строка(Выборка.УчетнаяЗаписьЭлектроннойПочты);
        ОписаниеОбъекта.НазваниеДляСвернутыхУслуг=Строка(Выборка.НазваниеДляСвернутыхУслуг);
        ОписаниеОбъекта.ИнформацияПредупреждениеНовойКвитанции=Строка(Выборка.ИнформацияПредупреждениеНовойКвитанции);
        Массив_записи.Добавить(ОписаниеОбъекта);
      
  КонецЦикла;

Автор: volodya1122 18.09.20, 8:59

svetas_l @ Сегодня, 9:36 * ,

Может это поможет. Там я какраз делал чтение данных JSON
https://pro1c.org.ua/topic/post-zapros-do-serveru-podatkovojy-61187/

Автор: svetas_l 18.09.20, 9:25

у вас тоже идёт

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


только уже с сайтом
мне бы сначала понять что не так и даёт ошибку в 3 строчках ,
а затем уже буду разбираться с сайтом.
В любом случае спасибо .


Автор: mut 18.09.20, 9:37

Если объект Чтение уже открыл файл, зачем вызывать УстановитьСтроку?

Если хотите через УстановитьСтроку, откройте файл объектом с типом ТекстовыйДокумент, получите строку и передайте в Чтение. А если уже сделали ОткрытьФайл, то просто вызывайте ПрочитатьJSON.

Автор: volodya1122 18.09.20, 9:42

Думаю проблема в этом

Цитата
Чтение.УстановитьСтроку("{}");


Цитата
УстановитьСтроку (SetString)
Синтаксис:

УстановитьСтроку(<СтрокаJSON>)
Параметры:

<СтрокаJSON> (обязательный)

Тип: Строка.
Строка, содержащая текст в формате JSON.


а у Вас в качестве строки пустой массив. А туда нужно засунуть весть текст из Вашего файла

Автор: svetas_l 18.09.20, 14:09

убрала установить строку - пишет недопустимое состояние потока

      
    Чтение         =    Новый ЧтениеJSON;
    Чтение.ОткрытьФайл(Этаформа.ПутьЧтения+".json");

  //  Чтение.УстановитьСтроку("{}");
    Джисон = ПрочитатьJSON(Чтение);
    
    Чтение.Закрыть();


в отладчике

Автор: volodya1122 18.09.20, 15:12

svetas_l @ Сегодня, 15:09 * ,

а точно файл такой есть?
Проверте

    ВыбФайл = Новый Файл(Этаформа.ПутьЧтения+".json");
    Если НЕ ВыбФайл.Существует() Тогда
        Сообщить("Файл не существует!");
    КонецЕсли;


Ну или в файле есть какие-то недопустиміе символі

Автор: mut 18.09.20, 16:52

svetas_l @ Сегодня, 15:09 * ,
Ну пробуйте открыть текст как текстовый файл (ТекстовыйДокумент) и из него передать строку в Чтение. У меня нет опыта с пирсингом json через ОткрытьФайл smile.gif

Автор: svetas_l 20.09.20, 8:12

mut @ 18.09.20, 17:52 * ,
файл существует

Автор: sava1 20.09.20, 8:48

попробуйте убрать дату из файла

Автор: andr_andrey 22.09.20, 20:06

Зачем возиться с файлами, если ответ сервера можно преобразовать в поток?
Например,

    ОтветСервера = Соединение.Получить(ХТТПЗапрос);
    ... // здесь можно обрабатывать ОтветСервера, например заголовки
    Поток = ОтветСервера.ПолучитьТелоКакПоток();
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.ОткрытьПоток(Поток);
    ... // здесь можно парсить ЧтениеJSON
    Поток.Закрыть();

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua