1C7.7 парсер JSON

23.01.14

Разработка - Универсальные функции

РАБОТОСПОСОБНЫЙ парсер JSON встраивается в глобальный модуль в виде 3х функций. Для достижения положительного результата активно используется regexp.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка для тестирования
.ert 27,00Kb ver:1.0.0.0
32
32 Скачать (1 SM) Купить за 1 850 руб.
Глобальный модуль
.txt 3,95Kb ver:1.0.0.0
52
52 Скачать (1 SM) Купить за 1 850 руб.

Работоспособная версия парсера JSON. Вызов парсера осуществляется функцией

Результат =глJSONПарсер("{""firstName"":""Иван"",""lastName"":""Иванов"",""address"":{""streetAddress"":""Московское ш.,101,кв.101"",""city"":""Ленинград"",""postalCode"":101101},""phoneNumbers"":[""812 123-1234"",""916 123-4567""]}"); 

Разбор строки с JSON осуществляется рекурсивной функцией JSONТокен. Функция JSONТокенТабле вспомогательная, она необходима для разбора массива заключенного в квавдратные скобки, например :

"phoneNumbers":["812 123-1234","916 123-4567"]

Все использованные в настоящей работе шаблоны (patterns) regexp проверены с помощью online regexp tester.

Результатом работы является индексированнная таблица (см. 1С++ ИндексированнаяТаблица ) с полями KEY, PARENT и VALUE.

Для тестирования в глобальный модуль встроена функция глJSONОтобразитьСписокЗначений. Пример ее вызова можно найти в обработке для тестирования (см. вложенные файлы).

JSON

См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1777    16    user706545_kseg1971    0    

6

Универсальные функции Программист Платформа 1С v7.7 1C77 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2595    zhenyat    7    

8

Универсальные функции Программист Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    5703    Zoltan_Black    11    

3

Универсальные функции Системный администратор Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    14261    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 1C77 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    11249    malovandrey    7    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 1C77 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    19005    2    HAMMER_59    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. selesta 18 20.03.14 13:44 Сейчас в теме
а есть ограничения на длину строки?
можно ли указать бооольшой масив, например, добавив его из текстового файла?
2. ysobol 26.05.17 20:42 Сейчас в теме
Во первых СПАСИБО!
И ... Я прошу прощения... Но ИМХО в глобальном модуле название функции отличается...
Я правильно понимаю что
Функция глJSONПарсер(Знач Стр) Экспорт // в глобальном модуле
и
Отклик=глРазборJSON(фJSON); // в тестовой обработке
Это одно и то же?
3. ysobol 26.05.17 21:14 Сейчас в теме
И еще вопрос: функция вызывает сама себя?

Функция JSONТокен(Стр,Таб,Родитель = "")
Истина=-1;
Ложь=0;
RegExp = СоздатьОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Не игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим

RegExp.Pattern = "(?:,|\{)?([^:]*):(""[^""]*""|\{[^}]*\}|\[[^}]*\]|[^},]*)";

Matches = RegExp.Execute(Стр);
ЧислоВхождений = Matches.Count();
Если ЧислоВхождений > 0 Тогда
Для к = 0 По ЧислоВхождений-1 Цикл
Match = Matches.Item(к);
Таб.НоваяСтрока();
С = СокрЛП(Match.Value);
Таб.Ключ = Сред(С, 2, Найти(С,":")-2);
Таб.Значение = Сред(С,Найти(С,":")+1,СтрДлина(С));
Таб.Родитель = Родитель;

С=СокрЛП(Таб.Значение);
Если ((лев(С, 1)="{") и (прав(С, 1)="}")) Тогда
JSONТокен(С, Таб, ?(СтрДлина(Таб.Родитель)>0,Таб.Родитель+".","")+Таб.Ключ);
КонецЕсли;

Если ((лев(С, 1)="[") и (прав(С, 1)="]")) Тогда
JSONТокенТабле(С, Таб, ?(СтрДлина(Таб.Родитель)>0,Таб.Родитель+".","")+Таб.Ключ);
КонецЕсли;


КонецЦикла;
КонецЕсли;

Возврат ЧислоВхождений;

КонецФункции // Токен
4. ital 10.04.18 19:01 Сейчас в теме
парсер не работает отправляю строку из 1млн символов и 1С вылетает на строке
Matches = RegExp.Execute(Стр);
5. Gkmy 28 10.04.18 20:20 Сейчас в теме
(4)
VBScript User's Guide: https://msdn.microsoft.com/en-us/library/sx7b3k7y(v=VS.85).aspx

"23.01.14 17:38", -- сколь же воды утекло с тех пор, всё проще делается.
"отправляю строку из 1млн символов", -- так много зачем? 1 млн. символов
6. ital 11.04.18 05:15 Сейчас в теме
там даже немного больше 1млн символов (1,159млн)... так сайт на get запрос отвечает в формате json и этот ответ нужно парсить и далее результат анализировать.
7. Gkmy 28 11.04.18 05:33 Сейчас в теме
(6)
роман в стихах "Евгений Онегин" 135 445 символов без пробелов
ваш "сайт на get запрос отвечает", - 8 556 романами
в пору задумываться над оптимизацией ответов сайта
высылайте свой пример (1,159млн),
попробую его в свой движок
9. ital 11.04.18 05:41 Сейчас в теме
может я что то не так понимаю и нужно разбор как то по другому делать, поясните буду признателен )
10. ital 11.04.18 05:50 Сейчас в теме
с JSON как то не приходилось сталкиваться, если есть идеи подкиньте в какую сторону копать. Формат вроде простой без заморочек но с ходу рабочего парсера не получилось найти... писать свой, перебором символов... мне кажется получится тормозная лажа, да и формат типовой как я понимаю :)
11. Gkmy 28 11.04.18 14:08 Сейчас в теме
(4) (10)
мой движ по мотивам jsonviewer -- тоже упал
однако, полноценный jsonviewer ваш файл прожевал успешно:



для экспериментов с телегой моего мне покуда хватает; возможно,.. позже погружусь глубже.

вывод:
ваша задача имеет решение.
12. Gkmy 28 11.04.18 14:28 Сейчас в теме
(8)



так это ставки,.. теперь понятно, зачем такие огромные файлы.
13. ital 12.04.18 06:15 Сейчас в теме
да это биржа криптовалют... на 8.3 накидал типовой разбор там тоже все проходит...
14. Gkmy 28 12.04.18 11:23 Сейчас в теме
(13)
славно.. в этой связи json для 7.7 ещё необходимо?
15. ital 12.04.18 11:58 Сейчас в теме
нет уже не нужно, спасибо.
16. Gkmy 28 12.04.18 16:35 Сейчас в теме
Оставьте свое сообщение