NVDAJson (Форматирование JSON в NVDA)
- Автор: 'Josiel Santos
- Исходный код дополнения: Посетить Web-сайт nvda-json
Краткое описание
Дополнение NVDAJson ддобавляет функционал для форматирования JSON в NVDA.
Сочетание клавиш:
NVDA+J: Если текст выделен, берет выделенный JSON-текст и показывает его отформатированным в диалоге NVDA с возможностью просмотра. Если текст не выделен, отображает диалог форматирования Json-текста, получая Json-данные из буфера обмена.
NVDA+Shift+J: форматирует несколько JSONS в одном тексте.
NVDA+Control+J: Преобразование строк с помощью JSONPointer.
Это дополнение позволяет фильтровать / преобразовывать JSON с помощью JQ или JSONPath.
По умолчанию используется JQ, но вы можете изменить это в панели настроек NVDA.
JQ - это как язык программирования для фильтрации и преобразования JSON-данных.
Благодаря такой гибкости, этот механизм запросов используется в дополнении по умолчанию.
JSONPath - это синтаксис, позволяющий фильтровать элементы JSON.
Примеры использования приведены в справке.
Сочетание клавиш изменить нельзя - эта возможность не реализовано разработчиком.
Основная информация
Название | Версия | Совместимость с API NVDA | Последняя протестированная версия NVDA | Минимальная версия NVDA | Дата загрузки в каталог | Размер | Лицензия |
---|---|---|---|---|---|---|---|
nvda-json | 2.0.2 | 2024.1 | 2024.1.0 | 2019.3.0 | 03-01-2025 18:24:03 | 619 Кб. | GPL v2 |
Информация о локализации на русский язык
- Локализация от: Разработчик или другой переводчик
- Перевод: Да
- Перевод интерфейса: Да
- Перевод справки: Да
Скачать
⬇ Перейти к истории версий 🔝 Назад к оглавлениюРазделы
🔝 Назад к оглавлениюСправка
Подробнее
NVDAJson (Форматирование JSON в NVDA)
Дополнение NVDAJson ддобавляет утилиты для обработки JSON в NVDA.
Использование
- NVDA+j: Если текст выделен, берет выделенный JSON-текст и показывает его отформатированным в диалоге NVDA с возможностью просмотра. Если текст не выделен, отображает диалог форматирования Json-текста, получая Json-данные из буфера обмена.
- NVDA+shift+j: форматирует несколько JSONS в одном тексте.
Как работает функция нескольких JSONS
Бывают ситуации, когда у нас есть несколько JSON, по одному на строку (например, строки журнала):
{«datetime»: «2022-03-10 21:04:05», „level“: «info», „message“: «пользователь вошел в систему"}
{ «datetime»: «2022-03-10 21:04:08», „level“: «error», „message“: «База данных не работает"}
При нажатии «NVDA+shift+j» это дополнение берет каждую строку, форматирует и отображает все элементы в виде списка.
Отформатированный текст будет отображаться следующим образом:
[
{
«datetime": «2022-03-10 21:04:05»,
«level": «info»,
«message": «пользователь вошел в систему»
},
{
«datetime": «2022-03-10 21:04:08»,
«level": «ошибка»,
«message": «База данных не работает»
}
]
Фильтрация / преобразование JSON
Это дополнение позволяет фильтровать / преобразовывать JSON с помощью JQ или JSONPath. По умолчанию используется JQ, но вы можете изменить это в панели настроек NVDA.
Когда вы открываете диалог JSON с помощью «NVDA+j» или «NVDA+shift+j», вы видите три текстовых поля: исходный текст, выражение запроса и выход. Для фильтрации/преобразования JSON необходимо использовать второе текстовое поле. Вы вводите запрос, нажимаете Enter и проверяете результат в текстовом поле «Выход».
Для проверки этой функции вы можете использовать этот поддельный лог-файл:
{«timestamp»: «2024-11-07T14:12:45Z», „level“: «INFO», „trace_id“: «abc123», „span_id“: «span789», „message“: «User login successful"}
{ «timestamp»: «2024-11-07T14:13:12Z», „level“: «ERROR», „trace_id“: «def456», „span_id“: «span101», „message“: «Не удалось подключиться к базе данных"}
{ «timestamp»: «2024-11-07T14:15:30Z», „level“: «DEBUG», „trace_id“: «ghi789», „span_id“: «span202», „message“: «Fetching data from cache"}
{ «timestamp»: «2024-11-07T14:17:02Z», „level“: «WARN», „trace_id“: «jkl012», „span_id“: «span303», „message“: «Обнаружено высокое использование памяти"}
{ «timestamp»: «2024-11-07T14:19:25Z», „level“: «INFO», „trace_id“: «mno345», „span_id“: «span404», „message“: «Запущено фоновое задание"}
{ «timestamp»: «2024-11-07T14:21:58Z», „level“: «ERROR», „trace_id“: «pqr678», „span_id“: «span505», „message“: «Timeout while waiting for external API response"}
{ «timestamp»: «2024-11-07T14:23:47Z», „level“: «DEBUG», „trace_id“: «stu901», „span_id“: «span606», „message“: «Данные профиля пользователя успешно разобраны"}
{ «timestamp»: «2024-11-07T14:25:15Z», „level“: «WARN», „trace_id“: «vwx234», „span_id“: «span707», „message“: «Вызвана устаревшая версия API"}
{ «timestamp»: «2024-11-07T14:27:33Z», „level“: «INFO», „trace_id“: «yzb567», „span_id“: «span808», „message“: «Файл успешно загружен"}
{ «timestamp»: «2024-11-07T14:29:09Z», „level“: «ERROR», „trace_id“: «cde890», „span_id“: «span909», „message“: «Null pointer exception encountered"}
JQ
JQ - это как язык программирования для фильтрации и преобразования JSON-данных. Благодаря такой гибкости, этот механизм запросов используется в дополнении по умолчанию.
Примеры JQ-программ:
описание | запрос |
---|---|
Получить исходный JSON | . |
Извлечь все сообщения журнала | [].message |
Получить все записи INFO | .[] \| select(.level == «INFO») |
Получить объект, содержащий только «timestamp» и «message» для записей WARN | [] \| select(.level == «WARN»)\| {timestamp, message} |
Получение временной метки записей, содержащих в сообщении слово «cache» | [] \| select(.message \| test(«cache»)) \| .timestamp |
Получить только поля «message» и «timestamp», сгруппированные по уровню | group_by(.level) \| map({(.[0].level): map({message: .message, timestamp: .timestamp})}) |
Получить первые три записи с уровнем DEBUG | [] \| select(.level == «DEBUG»)\| . \| limit(3;.) |
Добавить поле «is_critical=true» для уровней ERROR и false для остальных | [] \| .is_critical = (.level == «ERROR») \| . |
Удаление записей DEBUG | map(select(.level != «DEBUG»)) |
Сортировка записей по метке времени, по возрастанию | sort_by(.timestamp) |
JSONPath
JSONPath - это синтаксис, позволяющий фильтровать элементы JSON. Вы можете изучить его в документации.
Примеры запросов:
описание | запрос |
---|---|
Получить исходный JSON | $ |
Извлечь все сообщения журнала | $..message |
Получить записи с уровнем = ERROR | $[?(@.level == 'ERROR')] |
Извлеките поле «trace_id» из всех записей INFO | $[?(@.level == 'INFO')].trace_id |
Получить все записи, не относящиеся к отладке | $[?(@.level != 'DEBUG')] |
Извлечение всех журналов до временной метки | $[?(@.timestamp > '2024-11-07T14:20:00Z')] |
Преобразование строк с помощью JSONPointer (NVDA+ctrl+j)
Оригинальная идея от @thgcode в этом выпуске
Дано следующее JSON:
{
"name": "Josiel",
"family": {
"mother": {"name": "Maria"}
},
«programming_languages": [«Java», «PHP»]
}
С помощью этой функциональности вы можете создавать строки, используя плейсхолдеры с синтаксисом JSONPointer:
Меня зовут {/name}, мою маму зовут {/family/mother/name}, а мой любимый язык программирования {/programming_languages/1}
Выходные данные:
Меня зовут Джосиэль, мою маму зовут Мария, а мой любимый язык программирования - PHP
Использование автозаполнения
В поле редактирования выражения:
- Нажмите ctrl+enter, чтобы выполнить/сохранить запрос.
- Введите часть выражения
- Используйте стрелку вверх/вниз для перехода к списку предложений.
В списке предложений:
- Нажмите Enter, чтобы заполнить поле редактирования полным выражением и выполнить его.
- Нажмите backspace, чтобы удалить последний символ в поле редактирования и вернуть фокус к нему.
- Нажмите delete, чтобы удалить сохраненное выражение.
Возможности (реализованные и будущие)
- [x] Парсинг JSON из буфера обмена
- [x] Парсинг JSON из выделенного текста (курсор)
- [x] Парсинг нескольких JSON-строк (по одной на строку)
- [ ] Панель настроек
- [x] Возможность выбора используемого механизма запросов
- [ ] Настройка поведения скриптов (брать JSON только из выделенного текста, только из буфера обмена или из обоих (текущий))
- [ ] Варианты парсинга JSON
- [x] Оригинальный JSON с помощью модуля json в Python
- [ ] json5
- [ ] Интерактивный JSON через пользовательский интерфейс
- [x] Кнопка для копирования вывода в буфер обмена
- [x] Фильтрация / преобразование JSON
- [x] С JSONPath (https://goessner.net/articles/JsonPath/, https://github.com/h2non/jsonpath-ng)
- [x] С помощью JQ (https://jqlang.github.io/jq/, https://github.com/mwilliamson/jq.py)
- [x] Сохранение фильтров / преобразований, чтобы не набирать текст (программа и описание)
- [x] Автозаполнение сохраненных запросов
- [x] Преобразование строк с помощью JSONPointer (https://datatracker.ietf.org/doc/html/rfc6901, https://github.com/stefankoegl/python-json-pointer?tab=readme-ov-file)