{"id":20019718,"url":"https://github.com/arkuznetsov/jexlib","last_synced_at":"2025-05-04T23:32:07.290Z","repository":{"id":59411177,"uuid":"536700423","full_name":"arkuznetsov/jexlib","owner":"arkuznetsov","description":"Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript","archived":false,"fork":false,"pushed_at":"2024-04-22T12:50:55.000Z","size":60,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-08T14:12:13.213Z","etag":null,"topics":["csharp","json","onescript","oscript"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arkuznetsov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-14T17:58:42.000Z","updated_at":"2024-04-22T12:50:59.000Z","dependencies_parsed_at":"2024-11-13T08:39:37.779Z","dependency_job_id":null,"html_url":"https://github.com/arkuznetsov/jexlib","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fjexlib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fjexlib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fjexlib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fjexlib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arkuznetsov","download_url":"https://codeload.github.com/arkuznetsov/jexlib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252414468,"owners_count":21744110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","json","onescript","oscript"],"created_at":"2024-11-13T08:28:32.736Z","updated_at":"2025-05-04T23:32:06.856Z","avatar_url":"https://github.com/arkuznetsov.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub release](https://img.shields.io/github/release/ArKuznetsov/jexlib.svg?style=flat-square)](https://github.com/ArKuznetsov/jexlib/releases)\n[![GitHub license](https://img.shields.io/github/license/ArKuznetsov/jexlib.svg?style=flat-square)](https://github.com/ArKuznetsov/jexlib/blob/master/LICENSE)\n[![GitHub Releases](https://img.shields.io/github/downloads/ArKuznetsov/jexlib/latest/total?style=flat-square)](https://github.com/ArKuznetsov/jexlib/releases)\n[![GitHub All Releases](https://img.shields.io/github/downloads/ArKuznetsov/jexlib/total?style=flat-square)](https://github.com/ArKuznetsov/jexlib/releases)\n\n[![Build Status](https://img.shields.io/github/workflow/status/ArKuznetsov/jexlib/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0)](https://github.com/arkuznetsov/jexlib/actions/)\n[![Quality Gate](https://open.checkbsl.org/api/project_badges/measure?project=jexlib\u0026metric=alert_status)](https://open.checkbsl.org/dashboard/index/jexlib)\n[![Coverage](https://open.checkbsl.org/api/project_badges/measure?project=jexlib\u0026metric=coverage)](https://open.checkbsl.org/dashboard/index/jexlib)\n[![Tech debt](https://open.checkbsl.org/api/project_badges/measure?project=jexlib\u0026metric=sqale_index)](https://open.checkbsl.org/dashboard/index/jexlib)\n\n\u003ca href=\"https://checkbsl.org\"\u003e\u003cimg alt=\"Checked by Silver Bulleters SonarQube BSL plugin\" src=\"https://web-files.do.bit-erp.ru/sonar/b_t.png\" align=\"right\" style=\"width:400px\"/\u003e\u003c/a\u003e\n\n# Oscript JSON data extractor component\n\n## Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript\n\n## Примеры использования\n\n### Извлечение данных по пути JSON-Path из строки\n\n```bsl\n#Использовать jexlib\n\nСтрокаJSON = \"[{\"\"Имя\"\":\"\"Вася\"\",\"\"Пол\"\":\"\"Мужской\"\",\"\"Возраст\"\":29},{\"\"Имя\"\":\"\"Люба\"\",\"\"Пол\"\":\"\"Женский\"\",\"\"Возраст\"\":30}]\";\n\nИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();\n\nИзвлечениеДанных.УстановитьСтроку(СтрокаJSON);\n\nРезультат = ИзвлечениеДанных.Выбрать(\"$..Имя\");\n\nСообщить(Результат);\n// [\n//   \"Вася\",\n//   \"Люба\"\n// ]\n\nРезультат = ИзвлечениеДанных.Выбрать(\"$..[?(@.Возраст \u003e= 30)].Имя\");\n\nСообщить(Результат);\n// \"Люба\"\n\n```\n\n### Извлечение данных по пути JSON-Path из файла\n\n```bsl\n#Использовать jexlib\n\nИмяВходящегоФайла = \"d:\\tmp\\inputFile.json\";\n// inputFile.json\n//\n// [\n//   {\n//     \"Имя\"\":\"Вася\"\",\n//     \"Пол\"\":\"Мужской\",\n//     \"Возраст\":29\n//   },\n//   {\n//     \"Имя\":\"Люба\",\n//     \"Пол\":\"Женский\",\n//     \"Возраст\":30\n//   }\n// ]\n\nИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();\n\nИзвлечениеДанных.ОткрытьФайл(ИмяВходящегоФайла, КодировкаТекста.UTF8);\n\nРезультат = ИзвлечениеДанных.Выбрать(\"$[0].Пол\");\n\nСообщить(Результат);\n// \"Мужской\"\n\n```\n\n### Извлечение данных по пути JSON-Path из потока\n\n```bsl\n#Использовать jexlib\n\nИмяВходящегоФайла = \"d:\\tmp\\inputFile.json\";\n// inputFile.json\n//\n// [\n//   {\n//     \"Имя\"\":\"Вася\"\",\n//     \"Пол\"\":\"Мужской\",\n//     \"Возраст\":29\n//   },\n//   {\n//     \"Имя\":\"Люба\",\n//     \"Пол\":\"Женский\",\n//     \"Возраст\":30\n//   }\n// ]\n\nИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();\n\nПоток = Новый ФайловыйПоток(ПутьКФайлу, РежимОткрытияФайла.Открыть);\n\nИзвлечениеДанных.ОткрытьПоток(Поток, КодировкаТекста.UTF8);\n\nРезультат = ИзвлечениеДанных.Выбрать(\"$[1].Пол\");\n\nСообщить(Результат);\n// \"Женский\"\n\n```\n\n## Агрегатные функции над результатом выборки\n\n\n| **Функция** | **Применимо к типу выборки** | **Тип результата** | **Назначение** |\n|-|-|-|-|\n| **length()** | Массив, Соответствие | Число | - получает количество значений |\n| **sum()** | Массив из Число | Число | - получает сумму значений в массиве |\n| **avg()** | Массив из Число | Число | - получает среднее значение в массиве |\n| **min()** | Массив из Число | Число | - получает минимальное значение в массиве |\n| **max()** | Массив из Число | Число | - получает максимальное значение в массиве |\n| **first()** | Массив из Произвольный | Произвольный | - получает первое значение из массива |\n| **last()** | Массив из Произвольный | Произвольный | - получает последнее значение из массива |\n| **keys()** | Массив, Соответствие | Массив из Строка | - получает список полей в соответствии или список индексов в массиве |\n\n### Пример\n\n```bsl\n#Использовать jexlib\n\nСтрокаJSON = \"[{\"\"Имя\"\":\"\"Вася\"\",\"\"Пол\"\":\"\"Мужской\"\",\"\"Возраст\"\":29},{\"\"Имя\"\":\"\"Люба\"\",\"\"Пол\"\":\"\"Женский\"\",\"\"Возраст\"\":30}]\";\n\nИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();\n\nИзвлечениеДанных.УстановитьСтроку(СтрокаJSON);\n\n// Количество\nРезультат = ИзвлечениеДанных.Выбрать(\"$.Возраст.length()\");\n\nСообщить(Результат); // 2\n\n// Сумма\nРезультат = ИзвлечениеДанных.Выбрать(\"$.Возраст.sum()\");\n\nСообщить(Результат); // 59\n\n// Среднее\nРезультат = ИзвлечениеДанных.Выбрать(\"$.Возраст.avg()\");\n\nСообщить(Результат); // 29.5\n\n// Минимум\nРезультат = ИзвлечениеДанных.Выбрать(\"$.Возраст.min()\");\n\nСообщить(Результат); // 29\n\n// Максимум\nРезультат = ИзвлечениеДанных.Выбрать(\"$.Возраст.max()\");\n\nСообщить(Результат); // 30\n\n// Первое\nРезультат = ИзвлечениеДанных.Выбрать(\"$[*].first()\");\n\nСообщить(Результат); // {\"Имя\": \"Вася\", \"Пол\": \"Мужской\", \"Возраст\": 29}\n\n// Последнее\nРезультат = ИзвлечениеДанных.Выбрать(\"$[*].last()\");\n\nСообщить(Результат); // {\"Имя\": \"Люба\", \"Пол\": \"Женский\", \"Возраст\": 30}\n\n// Поля\nРезультат = ИзвлечениеДанных.Выбрать(\"$..[?(@.Возраст \u003e= 30)].keys()\");\n\nСообщить(Результат); // [\"Имя\", \"Пол\", \"Возраст\"]\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkuznetsov%2Fjexlib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farkuznetsov%2Fjexlib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkuznetsov%2Fjexlib/lists"}