|
Зазеркалье: Улучшение работы с 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) ну вот, скоро будет новая статья гени, о том как он джисон победил)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |