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
28
.ert 1.0.0.0 27,00Kb 28 Скачать
Глобальный модуль

.txt 3,95Kb
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 29 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 29 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 29 11.04.18 14:08 Сейчас в теме
(4) (10)
мой движ по мотивам jsonviewer -- тоже упал
однако, полноценный jsonviewer ваш файл прожевал успешно:



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

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



так это ставки,.. теперь понятно, зачем такие огромные файлы.
13. ital 12.04.18 06:15 Сейчас в теме
да это биржа криптовалют... на 8.3 накидал типовой разбор там тоже все проходит...
14. Gkmy 29 12.04.18 11:23 Сейчас в теме
(13)
славно.. в этой связи json для 7.7 ещё необходимо?
15. ital 12.04.18 11:58 Сейчас в теме
нет уже не нужно, спасибо.
16. Gkmy 29 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    30559    4    Serginio    1    

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

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

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

1 стартмани

27.09.2016    13993    2    HAMMER_59    6    

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

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

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

1 стартмани

15.09.2014    8022    7    kwadro    1    

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

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

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

1 стартмани

05.06.2014    15364    13    kos    3    

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

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

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

1 стартмани

13.01.2014    13572    9    victor_goodwill    7    

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

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

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

1 стартмани

05.10.2012    19299    28    BPAvel    8    

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

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

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

1 стартмани

15.08.2012    15715    19    serko8547    3    

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

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

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

1 стартмани

08.08.2012    24983    35    Lancelot-2M    9    

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

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

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

1 стартмани

22.05.2012    20020    24    newold2    13    

Расчет CRC32

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

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

1 стартмани

26.04.2012    13092    40    GAlexis    17    

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

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

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

1 стартмани

27.03.2012    30178    15    born85    41    

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

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

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

1 стартмани

11.02.2012    9186    33    Gagarick    3    

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

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

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

1 стартмани

17.10.2011    14950    84    warenic    12    

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

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

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

1 стартмани

17.10.2011    11761    51    warenic    6    

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

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

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

1 стартмани

23.09.2011    13593    26    Canabis220    7    

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

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

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

1 стартмани

05.09.2011    21521    64    Арчибальд    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    13474    203    solaris_    2    

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

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

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

1 стартмани

16.03.2011    12289    33    waol    1    

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

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

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

1 стартмани

02.03.2011    23084    146    tdr1225    7    

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

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

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

1 стартмани

06.01.2011    12197    162    provadyuga    6    

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

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

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

1 стартмани

24.11.2010    14383    150    aleksandr_leiman    6    

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

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

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

1 стартмани

13.11.2010    21772    19    Арчибальд    18    

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

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

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

1 стартмани

12.10.2010    8601    28    dav405    1    

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

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

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

1 стартмани

29.08.2010    10329    76    provadyuga    5    

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

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

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

1 стартмани

12.07.2010    12334    98    Bor_ka    9    

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

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

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

1 стартмани

09.05.2010    18068    250    kompas-dm    8    

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

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

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

1 стартмани

09.04.2010    13582    226    alex_serb    9    

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

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

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

1 стартмани

19.02.2010    13333    91    Lars Ulrich    10    

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

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

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

1 стартмани

04.02.2010    26018    41    Tatitutu    29    

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

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

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

1 стартмани

11.11.2009    11273    108    Boog    6    

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

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

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

1 стартмани

22.07.2009    15463    955    Alex_Smolensky    35    

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

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

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

1 стартмани

02.07.2009    13744    73    Parazyte    4    

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

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

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

1 стартмани

28.06.2009    22467    406    kompas-dm    18    

Календарь

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

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

1 стартмани

27.06.2009    12589    119    VRP    10    

Переключатель клавиатуры для 1С

Разработка внешних компонент Универсальные функции Сканер штрих-кода v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Переключатель клавиатуры для 1С

1 стартмани

17.06.2009    15337    54    MatveyIgor    2    

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

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

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

1 стартмани

28.05.2009    13108    62    Craig    18    

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

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

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

1 стартмани

01.04.2009    15818    176    MadDAD    13    

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

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

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

1 стартмани

20.03.2009    24677    662    Арчибальд    5