https://github.com/arkuznetsov/jexlib
Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript
https://github.com/arkuznetsov/jexlib
csharp json onescript oscript
Last synced: 9 months ago
JSON representation
Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript
- Host: GitHub
- URL: https://github.com/arkuznetsov/jexlib
- Owner: arkuznetsov
- License: mit
- Created: 2022-09-14T17:58:42.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-04-22T12:50:55.000Z (almost 2 years ago)
- Last Synced: 2025-04-08T14:12:13.213Z (10 months ago)
- Topics: csharp, json, onescript, oscript
- Language: C#
- Homepage:
- Size: 58.6 KB
- Stars: 9
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/ArKuznetsov/jexlib/releases)
[](https://github.com/ArKuznetsov/jexlib/blob/master/LICENSE)
[](https://github.com/ArKuznetsov/jexlib/releases)
[](https://github.com/ArKuznetsov/jexlib/releases)
[](https://github.com/arkuznetsov/jexlib/actions/)
[](https://open.checkbsl.org/dashboard/index/jexlib)
[](https://open.checkbsl.org/dashboard/index/jexlib)
[](https://open.checkbsl.org/dashboard/index/jexlib)
# Oscript JSON data extractor component
## Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript
## Примеры использования
### Извлечение данных по пути JSON-Path из строки
```bsl
#Использовать jexlib
СтрокаJSON = "[{""Имя"":""Вася"",""Пол"":""Мужской"",""Возраст"":29},{""Имя"":""Люба"",""Пол"":""Женский"",""Возраст"":30}]";
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
ИзвлечениеДанных.УстановитьСтроку(СтрокаJSON);
Результат = ИзвлечениеДанных.Выбрать("$..Имя");
Сообщить(Результат);
// [
// "Вася",
// "Люба"
// ]
Результат = ИзвлечениеДанных.Выбрать("$..[?(@.Возраст >= 30)].Имя");
Сообщить(Результат);
// "Люба"
```
### Извлечение данных по пути JSON-Path из файла
```bsl
#Использовать jexlib
ИмяВходящегоФайла = "d:\tmp\inputFile.json";
// inputFile.json
//
// [
// {
// "Имя"":"Вася"",
// "Пол"":"Мужской",
// "Возраст":29
// },
// {
// "Имя":"Люба",
// "Пол":"Женский",
// "Возраст":30
// }
// ]
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
ИзвлечениеДанных.ОткрытьФайл(ИмяВходящегоФайла, КодировкаТекста.UTF8);
Результат = ИзвлечениеДанных.Выбрать("$[0].Пол");
Сообщить(Результат);
// "Мужской"
```
### Извлечение данных по пути JSON-Path из потока
```bsl
#Использовать jexlib
ИмяВходящегоФайла = "d:\tmp\inputFile.json";
// inputFile.json
//
// [
// {
// "Имя"":"Вася"",
// "Пол"":"Мужской",
// "Возраст":29
// },
// {
// "Имя":"Люба",
// "Пол":"Женский",
// "Возраст":30
// }
// ]
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
Поток = Новый ФайловыйПоток(ПутьКФайлу, РежимОткрытияФайла.Открыть);
ИзвлечениеДанных.ОткрытьПоток(Поток, КодировкаТекста.UTF8);
Результат = ИзвлечениеДанных.Выбрать("$[1].Пол");
Сообщить(Результат);
// "Женский"
```
## Агрегатные функции над результатом выборки
| **Функция** | **Применимо к типу выборки** | **Тип результата** | **Назначение** |
|-|-|-|-|
| **length()** | Массив, Соответствие | Число | - получает количество значений |
| **sum()** | Массив из Число | Число | - получает сумму значений в массиве |
| **avg()** | Массив из Число | Число | - получает среднее значение в массиве |
| **min()** | Массив из Число | Число | - получает минимальное значение в массиве |
| **max()** | Массив из Число | Число | - получает максимальное значение в массиве |
| **first()** | Массив из Произвольный | Произвольный | - получает первое значение из массива |
| **last()** | Массив из Произвольный | Произвольный | - получает последнее значение из массива |
| **keys()** | Массив, Соответствие | Массив из Строка | - получает список полей в соответствии или список индексов в массиве |
### Пример
```bsl
#Использовать jexlib
СтрокаJSON = "[{""Имя"":""Вася"",""Пол"":""Мужской"",""Возраст"":29},{""Имя"":""Люба"",""Пол"":""Женский"",""Возраст"":30}]";
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
ИзвлечениеДанных.УстановитьСтроку(СтрокаJSON);
// Количество
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.length()");
Сообщить(Результат); // 2
// Сумма
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.sum()");
Сообщить(Результат); // 59
// Среднее
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.avg()");
Сообщить(Результат); // 29.5
// Минимум
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.min()");
Сообщить(Результат); // 29
// Максимум
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.max()");
Сообщить(Результат); // 30
// Первое
Результат = ИзвлечениеДанных.Выбрать("$[*].first()");
Сообщить(Результат); // {"Имя": "Вася", "Пол": "Мужской", "Возраст": 29}
// Последнее
Результат = ИзвлечениеДанных.Выбрать("$[*].last()");
Сообщить(Результат); // {"Имя": "Люба", "Пол": "Женский", "Возраст": 30}
// Поля
Результат = ИзвлечениеДанных.Выбрать("$..[?(@.Возраст >= 30)].keys()");
Сообщить(Результат); // ["Имя", "Пол", "Возраст"]
```
