Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 сен 2021, 01:35

Прочитать JSON и записать значения

Автор sudo, 18 дек 2018, 12:56

0 Пользователей и 1 гость просматривают эту тему.

sudo

Читаю JSON, полученный с сервера

Пример тела

{
  "current_page": 1,
  "data": [
    {
      "id": 1270803,
      "wnf_id": 23013,
      "wnf_file_id": 3729,
      "trade_name": "УГОЛЬ АКТИВИРОВАННЫЙ АВЕКСИМА",
      "packaging": "таблетки 250 мг 10 шт., упаковки ячейковые контурные (5), пачки картонные",
      "series": "20318",
      "series_date": null,
      "component_series_date": null,
      "manufacturer_name": "Общество с ограниченной ответственностью  \"Авексима Сибирь\"",
      "scope": "Серия",
      "info_letter_fullname": "№ 01И-3017/18 от 14.12.2018",
      "info_letter_date": "2018-12-14",
      "cert_num": "ЛСР-006128/08",
      "wnf_uid": "c6a2c74952acda98a4e731f62d5e696a",
      "info_letter_url": "url/2269905.pdf",
      "type": {
        "id": 21,
        "name": "Приостановление реализации"
      },
      "status": {
        "id": 2,
        "name": "недоброкачественное ЛС"
      },
      "man_country": {
        "id": 185,
        "code": 643,
        "name": "РОССИЯ",
        "full_name": "Российская Федерация",
        "alpha2": "RU",
        "alpha3": "RUS"
      }
    }
  ],
  "first_page_url": "https://url",
  "from": 1,
  "last_page": 11221,
  "last_page_url": "https://url",
  "next_page_url": "https://url",
  "path": "https://url",
  "per_page": 1,
  "prev_page_url": null,
  "to": 1,
  "total": 11221
}


Читаю стандартно

FileName = "C:\temp\1.json";

        Сообщить(FileName);                                                                                         
         
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.ОткрытьФайл(FileName);
Пока ЧтениеJSON.Прочитать() Цикл
TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
              Если TипJSON = ТипЗначенияJSON.Число ИЛИ TипJSON = ТипЗначенияJSON.Строка ИЛИ TипJSON = ТипЗначенияJSON.Булево ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
                     Значение = ЧтениеJSON.ТекущееЗначение;               
              ИначеЕсли TипJSON = ТипЗначенияJSON.Комментарий Тогда
                      Комментарий = ЧтениеJSON.ТекущееЗначение;
              ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда         
                      ИмяСвойства = ЧтениеJSON.ТекущееЗначение;                   
              КонецЕсли;
               
              Если      ИмяСвойства ="id" Тогда     
                  id=Значение;
  ИначеЕсли ИмяСвойства ="trade_name" Тогда   
      trade_name=Значение;
  ИначеЕсли ИмяСвойства ="packaging" Тогда       
      packaging=Значение;
  ИначеЕсли ИмяСвойства ="series" Тогда   
      series=Значение;
  ИначеЕсли ИмяСвойства ="manufacturer_name" Тогда   
      manufacturer_name=Значение;
  ИначеЕсли ИмяСвойства ="info_letter_fullname" Тогда     
          info_letter_fullname=Значение;
  ИначеЕсли ИмяСвойства ="cert_num" Тогда       
          cert_num=Значение;
    ИначеЕсли ИмяСвойства ="info_letter_url" Тогда       
          info_letter_url=Значение;

              КонецЕсли;





Так вот Сообщить(packaging) выдает целую кучу строк, первую нужную, все остальные - не то. Даже если у меня всего 1 объект в теле - все равно валится куча.
ЧЯДНТ? Может кто подскажет как записать эти значения в РегистрСведений или хоть в справочник, в котором соответственно есть эти поля?

Попытка не добавляет запись, потому что значения выдает пустое. Если вписать в значения данные жестко (тупо простые числа) - то запись добавляется

Если TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
     //items = 1;
  Если TипJSON =   ТипЗначенияJSON.НачалоОбъекта  Тогда       
      НаборЗаписей = РегистрыСведений.ор_ФальсификатыЛекарственныхСредств.СоздатьНаборЗаписей();
      //НоваяЗапись.Записать(Истина);
  КонецЕсли;
                           
          Если      ИмяСвойства ="series" Тогда     
              series=Значение;
          ИначеЕсли ИмяСвойства ="trade_name" Тогда   
          trade_name=Значение;
          ИначеЕсли ИмяСвойства ="manufacturer_name" Тогда       
              manufacturer_name=Значение;
  ИначеЕсли ИмяСвойства ="packaging" Тогда       
              packaging=Значение;
  ИначеЕсли ИмяСвойства ="id" Тогда       
              id=Значение;
  КонецЕсли;
 
               
  Если TипJSON =   ТипЗначенияJSON.КонецОбъекта  Тогда
  Сообщить (series);
НоваяЗапись = РегистрыСведений.ор_ФальсификатыЛекарственныхСредств.СоздатьМенеджерЗаписи();
    //НоваяЗапись = НаборЗаписей.Добавить();
НаборЗаписей.Серия = series;
НаборЗаписей.НаименованиеНоменклатуры = trade_name;
НаборЗаписей.НаименованиеПроизводителя = manufacturer_name;
НаборЗаписей.СтранаПроизводителя = 30;
НаборЗаписей.НомерПисьма = 30;
НаборЗаписей.ДатаПисьма = 30;
НаборЗаписей.ПисьмоPDF = 30;
НаборЗаписей.Описание = packaging;
НаборЗаписей.ТипФальсификата = 30;
НаборЗаписей.СтатусФальсификата = 1;
НаборЗаписей.id = id;
НаборЗаписей.Записать(Истина);
                        КонецЕсли;


antoneus

А почему не через ПрочитатьJSON? Все красиво вроде.

Теги: Json ЖСОН 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск