Jexlib
Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript
Install / Use
/learn @arkuznetsov/JexlibREADME
<a href="https://checkbsl.org"><img 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"/></a>
Oscript JSON data extractor component
Компонента извлечения данных из JSON по указанному пути JSON-Path для oscript
Примеры использования
Извлечение данных по пути JSON-Path из строки
#Использовать jexlib
СтрокаJSON = "[{""Имя"":""Вася"",""Пол"":""Мужской"",""Возраст"":29},{""Имя"":""Люба"",""Пол"":""Женский"",""Возраст"":30}]";
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
ИзвлечениеДанных.УстановитьСтроку(СтрокаJSON);
Результат = ИзвлечениеДанных.Выбрать("$..Имя");
Сообщить(Результат);
// [
// "Вася",
// "Люба"
// ]
Результат = ИзвлечениеДанных.Выбрать("$..[?(@.Возраст >= 30)].Имя");
Сообщить(Результат);
// "Люба"
Извлечение данных по пути JSON-Path из файла
#Использовать jexlib
ИмяВходящегоФайла = "d:\tmp\inputFile.json";
// inputFile.json
//
// [
// {
// "Имя"":"Вася"",
// "Пол"":"Мужской",
// "Возраст":29
// },
// {
// "Имя":"Люба",
// "Пол":"Женский",
// "Возраст":30
// }
// ]
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
ИзвлечениеДанных.ОткрытьФайл(ИмяВходящегоФайла, КодировкаТекста.UTF8);
Результат = ИзвлечениеДанных.Выбрать("$[0].Пол");
Сообщить(Результат);
// "Мужской"
Извлечение данных по пути JSON-Path из потока
#Использовать jexlib
ИмяВходящегоФайла = "d:\tmp\inputFile.json";
// inputFile.json
//
// [
// {
// "Имя"":"Вася"",
// "Пол"":"Мужской",
// "Возраст":29
// },
// {
// "Имя":"Люба",
// "Пол":"Женский",
// "Возраст":30
// }
// ]
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
Поток = Новый ФайловыйПоток(ПутьКФайлу, РежимОткрытияФайла.Открыть);
ИзвлечениеДанных.ОткрытьПоток(Поток, КодировкаТекста.UTF8);
Результат = ИзвлечениеДанных.Выбрать("$[1].Пол");
Сообщить(Результат);
// "Женский"
Агрегатные функции над результатом выборки
| Функция | Применимо к типу выборки | Тип результата | Назначение | |-|-|-|-| | length() | Массив, Соответствие | Число | - получает количество значений | | sum() | Массив из Число | Число | - получает сумму значений в массиве | | avg() | Массив из Число | Число | - получает среднее значение в массиве | | min() | Массив из Число | Число | - получает минимальное значение в массиве | | max() | Массив из Число | Число | - получает максимальное значение в массиве | | first() | Массив из Произвольный | Произвольный | - получает первое значение из массива | | last() | Массив из Произвольный | Произвольный | - получает последнее значение из массива | | keys() | Массив, Соответствие | Массив из Строка | - получает список полей в соответствии или список индексов в массиве |
Пример
#Использовать jexlib
СтрокаJSON = "[{""Имя"":""Вася"",""Пол"":""Мужской"",""Возраст"":29},{""Имя"":""Люба"",""Пол"":""Женский"",""Возраст"":30}]";
ИзвлечениеДанных = Новый ИзвлечениеДанныхJSON();
ИзвлечениеДанных.УстановитьСтроку(СтрокаJSON);
// Количество
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.length()");
Сообщить(Результат); // 2
// Сумма
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.sum()");
Сообщить(Результат); // 59
// Среднее
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.avg()");
Сообщить(Результат); // 29.5
// Минимум
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.min()");
Сообщить(Результат); // 29
// Максимум
Результат = ИзвлечениеДанных.Выбрать("$.Возраст.max()");
Сообщить(Результат); // 30
// Первое
Результат = ИзвлечениеДанных.Выбрать("$[*].first()");
Сообщить(Результат); // {"Имя": "Вася", "Пол": "Мужской", "Возраст": 29}
// Последнее
Результат = ИзвлечениеДанных.Выбрать("$[*].last()");
Сообщить(Результат); // {"Имя": "Люба", "Пол": "Женский", "Возраст": 30}
// Поля
Результат = ИзвлечениеДанных.Выбрать("$..[?(@.Возраст >= 30)].keys()");
Сообщить(Результат); // ["Имя", "Пол", "Возраст"]
