|   |   | 
| 
 | Зазеркалье: Улучшение работы с JSON | ☑ | ||
|---|---|---|---|---|
| 0
    
        Asmody 30.05.22✎ 13:03 | 
        https://wonderland.v8.1c.ru/blog/uluchshenie-raboty-s-json/
 Планируется в версии 8.3.23 Всё большее количество веб-сервисов переходит на обмен сообщениями в формате JSON. Чтобы облегчить труд прикладных разработчиков мы решили сделать работу с JSON максимально простой и удобной. Сейчас в глобальном контексте есть 4 метода чтения и записи JSON: ЗаписатьJSON, ЗаписатьДатуJSON, ПрочитатьJSON, ПрочитатьДатуJSON. Функциональность этих методов очень богатая и, по имеющейся у нас информации, она избыточна для большинства задач прикладных разработчиков. А ещё – вышеупомянутые методы недоступны в веб-клиенте. При этом многие задачи интеграции требуется решать именно из веб-клиента. В версии 8.3.23 мы добавим в глобальный контекст два новых метода: ЗаписатьЗначениеJSON (WriteJSONValue) и ПрочитатьЗначениеJSON (ReadJSONValue). Функциональность новых методов более «легкая» по сравнению с существующими и её должно хватить для большинства задач интеграции. Так, если старые методы ПрочитатьJSON и ЗаписатьJSON работают через объекты ЧтениеJSON и ЗаписьJSON соответственно, то синтаксис новых методов гораздо проще: ЗаписатьЗначениеJSON(<Значение>) возвращает строку. ПрочитатьЗначениеJSON(<Строка>) возвращает Структура, Массив, Число, Строка, Булево, Неопределено. Оба методы будут доступны везде: тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. Мы не объявляем предыдущие 4 метода устаревшими, но рекомендуем использовать новые методы везде, где это возможно; это, в частности, позволит писать универсальный код, исполняемый на всех компонентах системы. | |||
| 1
    
        Конструктор1С 30.05.22✎ 13:04 | 
        Круть     | |||
| 2
    
        Asmody 30.05.22✎ 13:04 | 
        Вот, просто, прям, ваще! 
 Дождались-дождалсь, повезло-повезло! Всего-то каких-то 10 лет прошло с появления https://infostart.ru/public/119601/ и вот оно! | |||
| 3
    
        PLUT гуру 30.05.22✎ 13:05 | 
        Joseph Stalin Otets Narodov     | |||
| 4
    
        Ryzeman 30.05.22✎ 13:09 | 
        Оно, конечно, хорошо, хоть и не необходимо, на выглядит как-то запоздало.
 З.Ы. свои обработки интеграций рефакторить не буду всё равно. | |||
| 5
    
        Кир Пластелинин 30.05.22✎ 13:14 | 
        а если при чтении ключ будет содержать недопустимые символы для структуры? просто будет валиться в ошибку?)     | |||
| 6
    
        Гений 1С гуру 30.05.22✎ 13:15 | 
        (0) вот ксатти да, недавно сдуру выбрал JSON вместо XML для обмена УТ-УТ, так плевался именно из-за того, что дата не сериализируется штатно, приходится костыли писать.     | |||
| 7
    
        Ryzeman 30.05.22✎ 13:17 | 
        (5) думаю, возможность десереализовать в соответствие никуда не денется. ИМХО тут ключевое что объект ЧтениеJSON можно не создавать.     | |||
| 8
    
        Ryzeman 30.05.22✎ 13:20 | 
        (6) В JSON нет тип значений дат, о чём ты? Что Формат() и Дата() это "костыли" потому, что ты поленился про формат на википедии почитать 2 минутки?)     | |||
| 9
    
        Кир Пластелинин 30.05.22✎ 13:20 | 
        (7) да мало ли. мб не дописали конечно в "ПрочитатьЗначениеJSON(<Строка>) возвращает Структура, Массив, Число, Строка, Булево, Неопределено", но будет забавно, если будет возвращаться неопределено в таких случаях.     | |||
| 10
    
        Кир Пластелинин 30.05.22✎ 13:21 | 
        +(9) в текущий схеме хотя б флаг был для чтения в соответствие, что более предсказуемо имхо.     | |||
| 11
    
        rudnitskij 30.05.22✎ 18:06 | 
        "ЗаписатьЗначениеJSON(<Значение>) возвращает строку. " - а куда его записывать будет?     | |||
| 12
    
        pavig 30.05.22✎ 18:11 | 
        (0) 
 У каждого одинэсника, сталкивавшегося с обработкой и передачей JSON, уже есть такая функция где-то в собственном общем модуле) Но для новых интеграций, конечно, будем использовать новую. Работать, возможно, будет быстрее. Хотя и старый вроде не грешил. Однако ж, на старых платформах код поддерживаться не будет. | |||
| 13
    
        alarm2020 30.05.22✎ 18:35 | 
        (11) Никуда. Чисто 1С-овское название функции. Я удивляюсь, почему они их не называют ЛяЛяЛя или Ромашка3     | |||
| 14
    
        Камчадал naïve 30.05.22✎ 18:57 | 
        Ну это если 1с с 1с , а если с другими системами, неопределено или null, как будет отрабатывать     | |||
| 15
    
        Камчадал naïve 30.05.22✎ 19:00 | 
        А по дате там же вроде можно указать при чтении формат даты и всё будет автоматом     | |||
| 16
    
        Ненавижу 1С гуру 30.05.22✎ 19:39 | 
        (14) неопределено вроде в JSON нет, а null есть     | |||
| 17
    
        dmt 30.05.22✎ 19:44 | 
        Так то уже к своим "оберткам" привыкли, но тоже неплохо.
 Ждем когда добавят возможность сохранять/убирать форматирование при записи | |||
| 18
    
        Камчадал naïve 30.05.22✎ 20:24 | 
        А ссылки тоже автоматом в Уид будут?     | |||
| 19
    
        Камчадал naïve 30.05.22✎ 20:25 | 
        Ещё бы тз в массив структур сразу)     | |||
| 20
    
        novichok79 30.05.22✎ 21:12 | 
        (19) никогда! native методы - это слишком жирно для разработчиков платформы :)     | |||
| 21
    
        Asmody 30.05.22✎ 21:17 | 
        (11) все уже давно привыкли к тому, что одинесовцы вдоль и поперек нарушают свои же стандарты. Юпитеру позволено     | |||
| 22
    
        novichok79 30.05.22✎ 21:28 | 
        помню в 2018м очень удивился тому, что сериализация json не поддерживается на веб-клиенте.
 рукалицо x 100500. | |||
| 23
    
        Камчадал naïve 30.05.22✎ 21:33 | 
        Да уж стандарты, 1с++ вспомнился. Индексируемая таблица значений и много че еще     | |||
| 24
    
        Asmody 31.05.22✎ 09:45 | 
        (23) к 2040му году в 1С обещают сделать классы     | |||
| 25
    
        VitaliyTokarev 31.05.22✎ 10:26 | 
        Кстати, в тему JSON. Подскажите, решил потыкать ВБ.
 [code] Заголовки= Новый Соответствие(); Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Authorization", Токен); Заголовки.Вставить("skip", "0"); Заголовки.Вставить("take", "1000"); Сервис = "/api/v2/stocks"; HTTPСоединение = Новый HTTPСоединение("suppliers-api.wildberries.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL()); HTTPЗапрос = Новый HTTPЗапрос(Сервис, Заголовки); HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); Результат = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Результат); СтруктураJSON = ПрочитатьJSON(ЧтениеJSON); [/code] И вот там возвращается параметр errorText = "Некорректный параметр skip". В описании API: skip * string (query) Задает сколько записей пропустить (для пагинации) Что я делаю не так? | |||
| 26
    
        arsik гуру 31.05.22✎ 10:28 | 
        (0) Плюс, что добавили вебклиент, а все остальное синтетический сахар. Это можно было и средствами 1С сделать.
 РаботаСJSON.ЗаписатьЗначениеJSON(<Значение>); | |||
| 27
    
        Asmody 31.05.22✎ 10:53 | 
        (25) Заголовки и параметры  http-запроса - это немножко разные вещи. Точнее, совсем разные.     | |||
| 28
    
        Кир Пластелинин 31.05.22✎ 10:53 | 
        (25) дык а зачем в заголовки то пихать skip?     | |||
| 29
    
        VitaliyTokarev 31.05.22✎ 12:17 | 
        (28) Упсь, а куда их пихать? Что-то я тогда потерялся)     | |||
| 30
    
        VitaliyTokarev 31.05.22✎ 12:20 | 
        В строку "Сервис", что ли?
 Сервис = "/api/v2/stocks?skip=0&take=1000"; | |||
| 31
    
        Asmody 31.05.22✎ 13:05 | 
        (30) для get-запросов параметры передаются в URL, для post-запросов - в теле запроса     | |||
| 32
    
        VitaliyTokarev 31.05.22✎ 13:10 | 
        (31) Спасибо     | |||
| 33
    
        Гений 1С гуру 31.05.22✎ 21:57 | 
        (8) а в XML есть сериализация в дату. хотя в XML тоже все якобы в строках. НЕ гони ересь     | |||
| 34
    
        Гений 1С гуру 31.05.22✎ 21:57 | 
        (24) Обещать - не значит дать.ггг     | |||
| 35
    
        Ryzeman 01.06.22✎ 06:54 | 
        (33) как то, что в XML есть сериализация в дату отменяет то, что в JSON её нет?) Повторюсь, тебе лень было 2 минуты потратить на чтение описания, но виноват в этом JSON?)     | |||
| 36
    
        Ненавижу 1С гуру 01.06.22✎ 08:04 | 
        (6) все штатно:
 Структура = Новый Структура("Key, Date", Пользователи.ТекущийПользователь().КлючБитрикс, НачалоДня(ТекущаяДата())); JSONЗапись = Новый ЗаписьJSON(); JSONЗапись.УстановитьСтроку(); ЗаписатьJSON(JSONЗапись, Структура); СтрокаJSON = JSONЗапись.Закрыть(); Сообщить(СтрокаJSON); | |||
| 37
    
        Гений 1С гуру 01.06.22✎ 09:59 | 
        (36) ггг... ты реально не просек, о чем вопрос, или не сталкивался. Замечательно, а теперь десериализируй эту дату.     | |||
| 38
    
        Выпрь 01.06.22✎ 10:09 | 
        (37) xmlзначение не работает?     | |||
| 39
    
        Kassern 01.06.22✎ 10:17 | 
        (37) нормально же десериализуется через ПрочитатьJSON() Там даже параметр специальный есть для даты     | |||
| 40
    
        Ненавижу 1С гуру 01.06.22✎ 10:22 | 
        (37) лови:
 Структура = Новый Структура("Key, Date", Пользователи.ТекущийПользователь().КлючБитрикс, НачалоДня(ТекущаяДата())); JSONЗапись = Новый ЗаписьJSON(); JSONЗапись.УстановитьСтроку(); ЗаписатьJSON(JSONЗапись, Структура); СтрокаJSON = JSONЗапись.Закрыть(); Сообщить(СтрокаJSON); JSONЧтение = Новый ЧтениеJSON(); JSONЧтение.УстановитьСтроку(СтрокаJSON); МассивПолейДата = СтрРазделить("Date",","); Результат = ПрочитатьJSON(JSONЧтение,,МассивПолейДата); Сообщить("Результат.Date = " + Результат.Date); Сообщить("ТипЗнч(Результат.Date) = " + ТипЗнч(Результат.Date)); | |||
| 41
    
        Kassern 01.06.22✎ 10:24 | 
        (40) ну вот, скоро будет новая статья гени, о том как он джисон победил)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |