0. pit201201 69 23.01.14 11:38 Сейчас в теме

1C7.7 парсер JSON

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
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С
Красноярск
зарплата от 50 000 руб.
По совместительству

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день


Программист 1С
Белгород
зарплата от 50 000 руб. до 60 000 руб.
Полный день