1C7.7 парсер JSON

Публикация № 252791

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

JSON

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

Работоспособная версия парсера 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ОтобразитьСписокЗначений. Пример ее вызова можно найти в обработке для тестирования (см. вложенные файлы).

Скачать файлы

Наименование Файл Версия Размер
Обработка для тестирования

.ert 27,00Kb
23.01.14
28
.ert 1.0.0.0 27,00Kb 28 Скачать
Глобальный модуль

.txt 3,95Kb
23.01.14
44
.txt 1.0.0.0 3,95Kb 44 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. selesta 17 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 25 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 25 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 25 11.04.18 14:08 Сейчас в теме
(4) (10)
мой движ по мотивам jsonviewer -- тоже упал
однако, полноценный jsonviewer ваш файл прожевал успешно:



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

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



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

См. также

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    28038    3    Serginio    1    

Как создать индикатор в 1С:Предприятии 7.7

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

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

1 стартмани

27.09.2016    12665    2    HAMMER_59    6    

Запуск php програм в 1С 7.7

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

Запуск программ PHP на сервере по прямому адресному запросу. Дополнительная возможность - передавать параметры методом GET-запросов.

1 стартмани

15.09.2014    7118    3    kwadro    1    

Перевод десятичного числа в HEX, BIN, OCT, _IdToStr и другие системы

Инструментарий разработчика Практика программирования Универсальные функции v7.7 1cv7.md Абонемент ($m)

Два алгоритма перевода десятичного числа в другую систему исчисления от 2 до 36 только средствами 1С (без ВК)

1 стартмани

05.06.2014    13916    7    kos    3    

Компонента "Быстрый регистр" для 1С 7.7 (на прямых запросах SQL 1c++)

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

Ускорение операций с регистрами 1с 7.7 через объектную модель, за счет доступа через прямые запросы SQL (1c++). Существует возможность добавления произвольных подзапросов соединений c другими таблицами и отборов WHERE, гибкой настройки вывода полей в результат

1 стартмани

13.01.2014    12595    2    victor_goodwill    7    

Обработка проверки номера сотового телефона

Универсальные обработки Классификаторы Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

Обработка предназначена для проверки номера сотового телефона по базе def номеров РФ по данным rossvyaz.ru

1 стартмани

05.10.2012    18004    2    BPAvel    8    

Почтовый клиент для скачивания вложений с почты 1С:7.7

WEB Универсальные функции v7.7 1cv7.md Абонемент ($m)

Скачивает вложения, и переименовывает на уникальное имя. Нужно для того, что бы скачивало ВСЕ файлы, даже если эти файлы с одинаковым именем. Изначально разрабатывалось для массового скачивания больших объемов квитанций о принятии отчетов в налоговую. иногда в письме было два и более разных файлов, с одинаковым именем. Существующие почтовые клиенты при этом скачивали только один (последний), остальные файлы терялись.

1 стартмани

15.08.2012    14398    2    serko8547    3    

Группировка данных в таблице значений (1С:7.7)

Работа с интерфейсом Универсальные функции v7.7 v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

Надоело каждый раз морочиться с итогами по группам данных в таблице значений при выводе отчета на печать! Вот и накидал простое решение... может и боян - но мне нравится)

1 стартмани

08.08.2012    21865    8    Lancelot-2M    9    

Универсальные функции Даты-Времени в 1Cv7

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

Представлены 4 основные функции и 2 вспомогательные. Входом функций являются Дата и Время как в стандартном, так и форматированном представлении. На закладке "Функции" дана возможность проверить работу функций. Представлен альтернативный выбор Даты с помощью Календаря (кн. "Выбор").; На закладке "Календарь" показано, как просто можно создать и распечатать календарь на любой(!) год.

1 стартмани

22.05.2012    17992    9    newold2    13    

Расчет CRC32

Универсальные функции v7.7 v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Расчет CRC32 без использования внешних компонент

1 стартмани

26.04.2012    12139    10    GAlexis    17    

Выяснение ID'а объекта в базе SQL по его внутреннему идентификатору 1С

Практика программирования Универсальные функции openconf v77::БУ 1cv7.md Абонемент ($m)

Обработка позволяет узнать ID в базе SQL конкретного агрегатного объекта конфигурации (метаданных) 1С 7.7.

1 стартмани

27.03.2012    28607    6    born85    41    

Прогрессбар для конфигураций 7.7

Работа с интерфейсом Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Простой прогрессбар для конфигураций 7.7. Реализован штатными средствами, работает с любым видом учета

1 стартмани

11.02.2012    7856    0    Gagarick    3    

Редактор таблиц значений

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

Простой и эффективный инструмент. Позволяет делать с таблицами значений все, что угодно: создавать, редактировать, записывать в файл, считывать из файла, обрабатывать...

1 стартмани

17.10.2011    14040    8    warenic    12    

Редактор списков значений

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

Простой и эффективный инструмент. Позволяет делать со списками значений все что угодно: создавать, редактировать, записывать в файл, считывать из файла, обрабатывать...

1 стартмани

17.10.2011    11006    0    warenic    6    

Консолидация и вычитание екселевских файлов.

Загрузка и выгрузка в Excel Анализ учета Универсальные функции Управление холдингом (CPM) Управление холдингом (CPM) v7.7 1cv7.md Абонемент ($m)

Куратору нужно из отчетов регионов сделать общий файл. И так каждую неделю. Автоматизируем процесс.

1 стартмани

23.09.2011    12563    0    Canabis220    7    

Дополнительные реквизиты справочников 7.7.: альтернатива.

Обработка справочников Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Никакого вмешательства в конфигурацию. Никаких дополнительных компонент.

1 стартмани

05.09.2011    20503    2    Арчибальд    27    

1C 7.7 FireBird (MSSQL, MSAccess, MySQL, PostgreSQL) - рабочий пример выполнение запроса + обработка

Внешние источники данных Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

1C 7.7 FireBird (MSSQL, MSAccess, MySQL, PostgreSQL) - рабочий пример выполнения запроса + обработка

1 стартмани

21.05.2011    12667    6    solaris_    2    

Сравнение таблиц с данными

Инструментарий разработчика Универсальные функции Анализ учета v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Выкладываю функцию для сравнения таблиц значений (может кому-нибудь пригодится). Сравнивает две таблицы - исходную и новую по заданному индексу (индекс используется в методе ИТПолноеСоединение). Сравниваются либо заданные колонки, либо все колонки, имеющиеся в обеих таблицах.

1 стартмани

16.03.2011    11524    0    waol    1    

Печать штрихкодов (не EAN-13) TTF-шрифтом

Сканер штрих-кода Ценники Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

Возникла необходимость печатать серийники, состоящие из букв латинского алфавита.

1 стартмани

02.03.2011    21872    17    tdr1225    7    

Конфигурация "Челнок" - набор функций и процедур для глобального модуля

Практика программирования Универсальные функции v77::ОУ v77::БУ v77::Расчет Россия Абонемент ($m)

Еще одна разработка - набор функций и процедур общего назначения для глобального модуля.

1 стартмани

06.01.2011    11414    1    provadyuga    6    

Автонумерация документов

Обработка документов Универсальные функции v7.7 1cv7.md Абонемент ($m)

Универсальная процедура автонумерации - решение, учитывающее ручные исправления номеров документов.

1 стартмани

24.11.2010    13251    5    aleksandr_leiman    6    

Граф(ин) 7.7. (дополнение)

Математика и алгоритмы Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Строим ориентированные графы.

1 стартмани

13.11.2010    20631    1    Арчибальд    18    

ТЗ2СводнаяТаблица

Загрузка и выгрузка в Excel Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Конвертор ТЗ в сводную таблицу Эксель.

1 стартмани

12.10.2010    7991    2    dav405    1    

Сведения истории значений

Универсальные функции Обработка справочников v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

Разработка содержит функцию «глСведенияИсторииЗначений(Элемент, НачДата, КонДата, ВсеИдРеквизитов = "")», демонстрацию которой выполняет данная разработка. Функция работает с историей реквизитов одного конкретного элемента справочника.

1 стартмани

29.08.2010    9640    0    provadyuga    5    

Шаблон отчета по регистру, с готовым макетом отчета.

Практика программирования Учет ТМЦ Универсальные функции Учет ТМЦ v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Шаблон нового отчета по регистру, с готовым макетом отчета. Позволяет создать новый отчет за 5 минут.

1 стартмани

12.07.2010    11553    1    Bor_ka    9    

Многофирменный учет или отборы в общих журналах документов

Обработка документов Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Стандартная привязка документа к определенному журналу имеет свои неудобства. Конкретному пользователю нужны определенные документы, да еще и с отбором по разным реквизитам. Отборы же в стандартном общем журнале документов реализованы только для одного реквизита : или фирма, или вид документа, или автор и т.д. Кроме этого, при попытке ввести новый документ , вываливается список всех документов конфигурации. А если у Вас многофирменный учет...

1 стартмани

09.05.2010    16621    4    kompas-dm    8    

Хранилище файлов для 7.7

Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Макетная конфигурация для структурированного хранения внешних файлов. Ссылки прикрепляются к документам и справочникам 1С.

1 стартмани

09.04.2010    12808    8    alex_serb    9    

Гибкие блокировки для 7.7 SQL Оперативный учет (очередные грабли :))

Универсальные функции Обработка документов v77::ОУ 1cv7.md Абонемент ($m)

Обработка с функционалом по внедрению/использованию гибких блокировок в 1С 7.7 на SQL. На ваш суд и обсуждение :) Идея общеизвестная

1 стартмани

19.02.2010    12597    5    Lars Ulrich    10    

ПЕЧАТЬ ИЕРОГЛИФОВ из 1С

Загрузка и выгрузка в Excel Универсальные функции v7.7 1cv7.md Абонемент ($m)

Если Вам нужно печатать из 1С иероглифы, а Вы не знаете как - предлагаю один из вариантов решения. А если Вы знаете - предложите свой, буду премного благодарен.

1 стартмани

04.02.2010    24829    1    Tatitutu    29    

Универсальный подбор элементов справочника

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

Универсальная обработка для подбора элементов любого справочника путем прямого запроса с помощью 1С++ с использованием фильтра по вхождению для строковых реквизитов. (только для SQL)

1 стартмани

11.11.2009    10517    1    Boog    6    

Набор универсальных функций для 1С77

Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Набор универсальных функций и кусочки кода для 1С77

1 стартмани

22.07.2009    14691    4    Alex_Smolensky    35    

Немного примеров для BEEP.dll

Разработка внешних компонент Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Несколько примеров реализации возможностей ВК BEEP.dll

1 стартмани

02.07.2009    12925    0    Parazyte    4    

1С 7.7. Календарь для "Бухгалтерии"

Управление персоналом (HRM) Универсальные функции Работа с интерфейсом Управление персоналом (HRM) v77::ОУ v77::БУ v77::Расчет 1С7:Бух Абонемент ($m)

1С 7.7. Календарь (графики работы) для "Чистой бухгалтерии". Без компоненты "РАСЧЕТ"

1 стартмани

28.06.2009    21284    5    kompas-dm    18    

Календарь

Универсальные функции Работа с интерфейсом v77::ОУ v77::БУ 1cv7.md Украина Абонемент ($m)

Вырванное из конфигурации решение справочника в виде календаря (с реализацией праздников и выходных для Украины).

1 стартмани

27.06.2009    11765    2    VRP    10    

Обработка сортировки по подразделению в любом документе

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v77::Расчет 1С7:ЗиК Абонемент ($m)

Эта обработка относится к статье "http://infostart.ru/blogs/1086/" (Создаем сортировку по подразделению в любом документе (Зарплата и Кадры 7.7))

1 стартмани

28.05.2009    11843    0    Craig    18    

Получение списка запущенных процессов. Запуск и завершение программ по PID

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

Демонстрация способа запуска приложения с сохранением его PID и последующим закрытием по PID, получения списка процессов.

1 стартмани

01.04.2009    14753    11    MadDAD    13    

7.7. Нумератор бланков штрих-кодом + читатель (сканирование ШК).

Сканер штрих-кода Универсальные печатные формы Универсальные функции Документооборот и делопроизводство Документооборот и делопроизводство v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Как-то высказывалось здесь пожелание познакомиться со штрих-кодированием и объектом BarCode. Знакомьтесь. Вариант использования: Контроль возврата выданных документов.

1 стартмани

20.03.2009    23576    7    Арчибальд    5