Имя: Пароль:
1C
1С v8
парсинг JSON. Формирование данных на стороне сата
,
0 lamme
 
18.02.19
11:48
сайт.
2 скрипта. выдают JSON.
1С к ним обращается.
один JSON считывается как
    тДанные = ПрочитатьJSON(тЧтение, Ложь);
второй
    тДанные = ПрочитатьJSON(тЧтение, ИСТИНА);
Разница = во втором параметре
<ПрочитатьВСоответствие> (необязательный)

Тип: Булево.
Если установлено Истина, чтение объекта JSON будет выполнено в Соответствие.
Если установлено Ложь, объекты будут считываться в объект типа Структура.
Примечание. При десериализации объектов JSON в структуру необходимо помнить о требованиях к ключам структуры. Если при десериализации объекта будет найдено имя свойства, недопустимое для ключа структуры, то будет вызвано исключение.


если второй JSON читать как
    тДанные = ПрочитатьJSON(тЧтение, Ложь);
то выходит ошибка
Ошибка при вызове метода контекста (ПрочитатьJSON): Недопустимое имя свойства: '1' для чтения JSON в объект Структура

Вопрос

что не так формирует сайт ?
надо чтобы было чтение JSON с параметром
    тДанные = ПрочитатьJSON(тЧтение, Ложь);
1 lamme
 
18.02.19
11:48
как правильно объяснить программерам сайта  - что не так ?
2 VladZ
 
18.02.19
11:50
Недопустимое имя свойства: '1'  - не может быть цифрой.
3 Василий Алибабаевич
 
18.02.19
11:51
(0) что не так формирует сайт ?
Еще бы посмотреть как же именно формирует сайт.
Ну хотя бы фрагмент с ошибкой. Тот, где свойство = "1".
4 VladZ
 
18.02.19
11:52
Я такие "фичи" сам обрабатываю:

Функция ОткорректироватьОтветОтСервере(ОтветОтСервера, ЗаменятьНаРеквизит = "ID")
    
    ВыхСтрока = "";
    
    Для сч = 1 по СтрЧислоСтрок(ОтветОтСервера) Цикл
        
        // смотрим, что в конце:
        СтрокаДляКорректировки = СтрПолучитьСтроку(ОтветОтСервера,сч);
        НачалоНайденнойСтроки = СтрНайти(СтрокаДляКорректировки, " : {");
        
        Если НачалоНайденнойСтроки > 0 Тогда
            // если число - корректируем
            СимволПеред = Сред(СтрокаДляКорректировки,НачалоНайденнойСтроки-2,1);
            
            Если СимволПеред >= "0"
                и  СимволПеред <="9"  Тогда
                // преобразуем строку.
                НужныйНомер = СокрЛП(Сред(СтрокаДляКорректировки,1,НачалоНайденнойСтроки-2));
                НужныйНомер = СтрЗаменить(НужныйНомер,"""", "");
                
                СтрокаДляКорректировки = """" + ЗаменятьНаРеквизит + "_" + НужныйНомер + """" + " : {";
                СтрокаДляКорректировки = СтрокаДляКорректировки + Символы.ВК + """" + ЗаменятьНаРеквизит + """" + ":" + """" + НужныйНомер + """" + ",";
                
            КонецЕсли;
            
        КонецЕсли;
        
        ВыхСтрока = ВыхСтрока + Символы.ВК + СтрокаДляКорректировки;
        
    КонецЦикла;
    
    Возврат ВыхСтрока;
    
КонецФункции // ОткорректироватьОтветОтСервере
5 lamme
 
18.02.19
11:56
вот ответ от проблемного скрипта

{"status":"success","delivery":[{"id":"92541","date":"14.02.2019 17:12:53","account":{"1":{"id":"6dcd54ec-1e0b-11e8-8166-00155d019702","name
6 VladZ
 
18.02.19
11:58
Вот тут проблема: "1":{

1С не умеет такое парсить.
7 lamme
 
18.02.19
11:59
вот нормальное

{"status":"success","orders":[{"order":{"order_id":"7104","id":"","date_insert":1550478173,"number":"7104","comment":"","oneclick":false,"p
8 lamme
 
18.02.19
12:00
(6)
не уловил ...
9 Василий Алибабаевич
 
18.02.19
12:00
(5) Вот жеШ оно :
"account":{"1":{"id"
10 Вафель
 
18.02.19
12:00
(8) а ты вообще кто?
11 lamme
 
18.02.19
12:01
(9)
так а что тут надо было ?
12 lamme
 
18.02.19
12:02
(9)
а как правильно тогда ?
13 Василий Алибабаевич
 
18.02.19
12:03
(12) Ну хотя бы вместо
"account":{"1":{"id"
например
"account":{"n1":{"id"
14 lamme
 
18.02.19
12:07
передал программистам сайта.. пробуем
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший