1C7.7 парсер JSON

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

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

JSON

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

7

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

Наименование Файл Версия Размер
Обработка для тестирования
.ert 27,00Kb
23.01.14
25
.ert 1.0.0.0 27,00Kb 25 Скачать
Глобальный модуль
.txt 3,95Kb
23.01.14
40
.txt 1.0.0.0 3,95Kb 40 Скачать

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

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



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

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



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

См. также

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

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

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

1 стартмани

27.09.2016    9898    2    HAMMER_59    6       

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

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

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

1 стартмани

25.06.2015    21834    4    Serginio    1       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Абонемент ($m) Универсальные функции

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

1 стартмани

15.09.2014    5315    7    kwadro    1       

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

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

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

1 стартмани

05.06.2014    10629    10    kos    3       

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

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 Windows Абонемент ($m) Универсальные функции

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

1 стартмани

13.01.2014    10288    8    victor_goodwill    7       

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

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

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

1 стартмани

05.10.2012    15217    28    BPAvel    8       

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

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) WEB Универсальные функции

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

1 стартмани

15.08.2012    12402    19    serko8547    3       

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

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

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

1 стартмани

08.08.2012    17798    35    Lancelot-2M    9       

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

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

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

1 стартмани

22.05.2012    14870    19    newold2    13       

Расчет CRC32 5

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

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

1 стартмани

26.04.2012    10154    36    GAlexis    17       

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

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

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

1 стартмани

27.03.2012    25377    14    born85    41       

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

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

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

1 стартмани

11.02.2012    5709    32    Gagarick    3       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Универсальные функции

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

1 стартмани

17.10.2011    11952    83    warenic    12       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Универсальные функции

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

1 стартмани

17.10.2011    9193    51    warenic    6       

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

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

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

1 стартмани

16.03.2011    9837    32    waol    1       

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

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

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

1 стартмани

02.03.2011    19189    146    tdr1225    7       

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

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

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

1 стартмани

24.11.2010    11133    149    aleksandr_leiman    6       

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

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

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

1 стартмани

29.08.2010    8160    76    provadyuga    5       

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

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

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

1 стартмани

09.05.2010    14571    249    kompas-dm    8       

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

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

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

1 стартмани

09.04.2010    11137    226    alex_serb    9       

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

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v77::ОУ 1cv7.md Windows Абонемент ($m) Обработка документов Универсальные функции

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

1 стартмани

19.02.2010    10942    92    Lars Ulrich    10       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Загрузка и выгрузка в Excel Универсальные функции

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

1 стартмани

04.02.2010    21894    41    Tatitutu    29       

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

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Универсальные функции

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

1 стартмани

11.11.2009    9054    108    Boog    6       

Календарь 13

Инструменты и обработки no Внешняя обработка (ert,epf) v77::ОУ v77::БУ 1cv7.md Украина Windows Абонемент ($m) Работа с интерфейсом Универсальные функции

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

1 стартмани

27.06.2009    10239    119    VRP    10       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК Windows Зарплата Управление персоналом (HRM) Абонемент ($m) Универсальные функции

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

1 стартмани

28.05.2009    9889    62    Craig    18       

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

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Универсальные функции

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

1 стартмани

01.04.2009    12791    174    MadDAD    13       

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

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

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

1 стартмани

20.03.2009    20794    661    Арчибальд    5       

Процедура-плагин: Выгрузка в Йоксель для Новейшего отчета 7.7 21

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

Процедура дополняет Новейший отчет 7.7 с возможностью выгрузки созданного отчета в Йоксель (Excel) с группировками по строкам.

1 стартмани

09.12.2008    15945    133    Djelf    13       

Расширенные настройки для отчетов 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Абонемент ($m) Работа с интерфейсом Универсальные функции

Практически полный аналог стандартных возможностей - Сохранение и восстановление настроек в отчетах...

1 стартмани

08.12.2008    11525    154    Noy    27       

Как сделать удобный отбор документов в общем журнале для "Бухгалтерия 7.7", "1С:УСН" и "Зарплата и кадры 7.7" 46

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

Доработка предназначена для более удобного отбора документов общего журнала, чем в типовой "1С:Бухгалтерия", "1С:УСН", "1С:Зарплата и кадры". Позволяет пользователю: 1) установить отбор по виду документа; 2) установить отбор по сотруднику/контрагенту (зависит от конфигурации); 3) отключить отбор; 4) установить в качестве интервал текущие: день, месяц, квартал, год; 5) открыть сколько угодно общих журналов (!) и в них опять же установить отборы.

1 стартмани

13.12.2007    22483    396    IsiKosta    17