Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как прочитать и перебрать JSON
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
burza
Подскажите есть такой JSON нужно перебрать данные и занести их в справочник контрагента, помогите с кодом.
вот сам JSON
{"error":"","errorMessage":"","result":[{"userType":1,"managerID":"1","managerExternalID":null,"managerLogin":
"Evgeniy","officeID":"1","officeExternalID":null,"officeName":"Дана-
Автогруп","officeMode":0,"customerID":"32565","customerExternalID":null,"categoryID":"2","categoryExternalID":null,"categoryName":
"ОПТ","name":"Олег","secondName":"Иванович ","surname":"Коломиец ","fullName":"Коломиец  
Олег Иванович ","login":"Olepka","phone":"+380(97)906-19-44","mobilePhone":null,"email":"Olepka@ukr.net","icq":null,"skype":null,"country":
"Украина","region":"Николаевская область","city":"Николаев","organizationName":null,"businessID":null,"businessExternalID":null,"businessName":
null,"balance":"99.96","creditLimit":null,"managerComment":null,"contragentType":"1","organizationFormID":null,"
organizationFormExternalID":null,"organizationFormName":null,"groupID":null,"groupExternalID":null,"groupName":null,"preferredCurrencyID":null,"
preferredCurrencyExternalID":null,"preferredCurrencyISO":null,"aiBalanceOrdered":"0.00","
aiBalanceActiveOrdered":"0.00","aiBalanceTotal":"0.00","aiBalanceByReturn":"0.00","aiBalanceDelayed":"0.00","dateRegistered":"2020-10-19 19:50:24"}]}


burza @ Сегодня, 10:03 необходимо зарегистрироваться для просмотра ссылки ,
ну кто поможет незнающему)
sava1
в Гугле забанили ?
куча статей и примеров.
Кто хочет разбираться в куче текста Вашего файла ?
Vofka
Обычно мне не очень импонируют ответы в стиле
Цитата(sava1 @ 11.11.20, 11:12) необходимо зарегистрироваться для просмотра ссылки
в Гугле забанили ?

Но тут как бы да... Первая ссылка в гугле: необходимо зарегистрироваться для просмотра ссылки
burza
В принципе ожидаемо!
Vofka
Цитата(burza @ 11.11.20, 11:45) необходимо зарегистрироваться для просмотра ссылки
В принципе ожидаемо!

А на что вы рассчитывали? Тривиальная задача с кучей информации вокруг как это делается. bn.gif
Готовый код могут написать, например, необходимо зарегистрироваться для просмотра ссылки. Но за деньги.
sava1
burza @ Сегодня, 11:45 необходимо зарегистрироваться для просмотра ссылки ,
Если бы это была стандартная сериализация - тогда можно было бы получить ответ.
У Вас чем-то сформирован файл - читайте, разбирайте, вписывайте в Контрагенты
burza


fullName в JSON один , а на выходе двоит файлы, сначала пишет Коломиец и второй строкой уже полное Коломиец Олег Иванович

как исправить? где втыкаю

FileName = "c:\1CData\test.json";

     //   Сообщить(FileName);                                                                                          
          
        ЧтениеJSON = Новый Чтение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.ТекущееЗначение;                    
              КонецЕсли;
              
            //НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();  

            Если      ИмяСвойства ="fullName" Тогда
                Сообщить(Значение);
                //НовыйЭлемент.Наименование = Значение;
                //НовыйЭлемент.НаименованиеПолное = Значение;
                // ИмяСотрудника=Значение;
            // ИначеЕсли ИмяСвойства ="customerID" Тогда
              //   НовыйЭлемент.Код= Значение;
              //    ФамилияСотрудника=Значение;
              //ИначеЕсли ИмяСвойства ="packaging" Тогда        
              //    packaging=Значение;
              //ИначеЕсли ИмяСвойства ="series" Тогда    
              //    series=Значение;
              //ИначеЕсли ИмяСвойства ="manufacturer_name" Тогда    
              //    manufacturer_name=Значение;
              //ИначеЕсли ИмяСвойства ="info_letter_fullname" Тогда    
              //        info_letter_fullname=Значение;
              //ИначеЕсли ИмяСвойства ="cert_num" Тогда        
              //        cert_num=Значение;
              //  ИначеЕсли ИмяСвойства ="info_letter_url" Тогда        
              //        info_letter_url=Значение;
               //НовыйЭлемент.Наименование = "123";
               //НовыйЭлемент.НаименованиеПолное ="123";
              //НовыйЭлемент.ФормаСобственности= Перечисления.ФормыСобственности.ЧастноеЛицо;
              //НовыйЭлемент.СогласиеНаОбработкуПерсональныхДанных = Перечисления.ВариантыОтветов.Да;
              //НовыйЭлемент.ВидКонтрагента = Перечисления.ВидыКонтрагентов.Покупатель;
              //
                //НовыйЭлемент.Записать();
                  КонецЕсли;
            //НовыйЭлемент.Записать();       
                  

         КонецЦикла;
//ЧтениеJSON.Закрыть();
sava1
Цитата(burza @ 11.11.20, 10:42) необходимо зарегистрироваться для просмотра ссылки
,"surname":"Коломиец ","fullName":"Коломиец


Вы получаете ИмяСвойста ФуллНейм , при этом Значение - Коломиец, следующее - Имя свойства - ФуллНейм, а Значение - Полное наименование
burza
sava1 @ Сегодня, 13:27 необходимо зарегистрироваться для просмотра ссылки ,
как оставить только фулнейм? мне нужно что в фулнейме вписать в справочник. то есть мне нужно только одно значения.
sava1
тогда наверно Значение и ИмяСвойства надо заполнять в одном разделе Если

типо так
Если TипJSON = ТипЗначенияJSON.Число ИЛИ TипJSON = ТипЗначенияJSON.Строка ИЛИ TипJSON = ТипЗначенияJSON.Булево ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
                     ИмяСвойства = ЧтениеJSON.ТекущееЗначение;                    
                     Значение = ЧтениеJSON.ТекущееЗначение;                
,,,                
              КонецЕсли;


вооще-то проще заполнить Соответствие - Ключ_Значение, а потом обрабатывать
burza
sava1 @ Сегодня, 13:38 необходимо зарегистрироваться для просмотра ссылки ,
спс

Сообщить выводит все правильно а вот когда пытаюсь записать с справочник говорит что там пусто реквезит не заполнен?
        
            НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();            
            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.ТекущееЗначение;
                      
                /////////////////////////////////////////////////////////////      
                Если   ИмяСвойства ="login" Тогда
                // Сообщить(Значение);
                //НовыйЭлемент.Наименование = Значение;
                //НовыйЭлемент.НаименованиеПолное = Значение;
                
                ИначеЕсли ИмяСвойства ="customerExternalID" тогда
                
                НовыйЭлемент.Код= Значение;                
                    //Сообщить(Значение);
              
                КонецЕсли;
                            
            //НовыйЭлемент.Записать();
        КонецЕсли;
Alegzander
burza @ Сегодня, 15:03 необходимо зарегистрироваться для просмотра ссылки ,
Какой реквизит? "Наименование"? Установка "Наименование" закоментирована: //НовыйЭлемент.Наименование = Значение;
burza
Alegzander @ Сегодня, 14:11 необходимо зарегистрироваться для просмотра ссылки ,
код
sava1
Те-же грабли - в Если ... КонецЕсли // Значение и ИмяСвойства заполняем попарно
burza
1

burza @ Сегодня, 14:33 необходимо зарегистрироваться для просмотра ссылки ,
запутался уже)
daveal
А зачем в ручную свойства обходить? Есть же метод ПрочитатьJSON - на выходе будет структура. В ней массив структур results судя по входящим данным
burza
daveal @ Сегодня, 15:38 необходимо зарегистрироваться для просмотра ссылки ,
ну вот дайте пример как это все обойти и в клиентов записать)
daveal
burza @ Сегодня, 16:45 необходимо зарегистрироваться для просмотра ссылки ,

Сделайте через прочитатьJson в отладчике и там все будет понятно
Petre
burza @ Today, 15:45 необходимо зарегистрироваться для просмотра ссылки ,
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(МойТекстJSON);
ПрочитанноеЗначениеКотороеНеобходимоПосмотретьВОтладчике = ПрочитатьJSON(ЧтениеJSON);
Alegzander
burza @ Вчера, 16:45 необходимо зарегистрироваться для просмотра ссылки ,
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.ОткрытьФайл("c:/test.json");
    ПрочитанноеЗначениеКотороеНеобходимоПосмотретьВОтладчике = ПрочитатьJSON(ЧтениеJSON,Истина);
    Для Каждого стр Из ПрочитанноеЗначениеКотороеНеобходимоПосмотретьВОтладчике["result"] Цикл
        НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();  
        НовыйЭлемент.Код=стр["customerID"];
        НовыйЭлемент.Наименование=стр["login"];
        НовыйЭлемент.Записать();
    КонецЦикла;
mut
Если из приведенного в начале примера JSON-а убрать символы перевода строк, он становится нормальным валидным джисоном, 1с его читает стандартными методами. В соответствие или структуру, как вам удобнее.

Текст после очистки:

{
    "error": "",
    "errorMessage": "",
    "result": [{
        "userType": 1,
        "managerID": "1",
        "managerExternalID": null,
        "managerLogin": "Evgeniy",
        "officeID": "1",
        "officeExternalID": null,
        "officeName": "Дана-Автогруп",
        "officeMode": 0,
        "customerID": "32565",
        "customerExternalID": null,
        "categoryID": "2",
        "categoryExternalID": null,
        "categoryName": "ОПТ",
        "name": "Олег",
        "secondName": "Иванович ",
        "surname": "Коломиец ",
        "fullName": "Коломиец Олег Иванович ",
        "login": "Olepka",
        "phone": "+380(97)906-19-44",
        "mobilePhone": null,
        "email": "Olepka@ukr.net",
        "icq": null,
        "skype": null,
        "country": "Украина",
        "region": "Николаевская область",
        "city": "Николаев",
        "organizationName": null,
        "businessID": null,
        "businessExternalID": null,
        "businessName": null,
        "balance": "99.96",
        "creditLimit": null,
        "managerComment": null,
        "contragentType": "1",
        "organizationFormID": null,
        "organizationFormExternalID": null,
        "organizationFormName": null,
        "groupID": null,
        "groupExternalID": null,
        "groupName": null,
        "preferredCurrencyID": null,
        "preferredCurrencyExternalID": null,
        "preferredCurrencyISO": null,
        "aiBalanceOrdered": "0.00",
        "aiBalanceActiveOrdered": "0.00",
        "aiBalanceTotal": "0.00",
        "aiBalanceByReturn": "0.00",
        "aiBalanceDelayed": "0.00",
        "dateRegistered": "2020-10-19 19:50:24"
    }]
}
Anderson
А зачем изобретать велосипед. Спасибо человеку, все делается в одну строку. необходимо зарегистрироваться для просмотра ссылки
Результат = КоннекторHTTP.GetJson("http://httpbin.org/get");
Petre
Anderson @ Today, 14:29 необходимо зарегистрироваться для просмотра ссылки ,
Вы вообще о чем?
Anderson
Petre, Судя по всему у автора проблемы с пониманием принципа работы с данными такого типа. Предоставил готовый вариант, который в одну строку распарсит его данные в удобный формат.
Vofka
Anderson @ Сегодня, 9:34 необходимо зарегистрироваться для просмотра ссылки ,
Работа с json это не всегда http запрос куда-то.
Anderson
Vofka, Да и такое встречается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.