Есть ли инструмент командной строки `jq` или оболочка, которая позволяет вам интерактивно исследовать` jq`, аналогично `jmespath.terminal`

jq - это легкий и гибкий процессор JSON командной строки.
https://stedolan.github.io/jq/

Есть ли jq инструмент командной строки или оболочка, которая позволяет передавать в него вывод и интерактивно исследовать jq, с вводом JSON на одной панели и интерактивным обновлением результатов на другой панели, как и jmespath.terminal?

Я ищу что-то похожее на JMESPath Terminal jpterm
"Инструмент исследования JMESPath в терминале"
https://github.com/jmespath/jmespath.terminal

Я нашел этот проект jqsh, но он не поддерживается и, похоже, выдает много ошибок, когда я его использую.
https://github.com/bmatsuo/jqsh

Я использовал https://jqplay.org/, и это отличный jq учебный веб-инструмент. Однако я хочу иметь возможность в оболочке передавать json-вывод команды в интерактивный jq, что позволяет мне исследовать и экспериментировать с jq командами.

Заранее спасибо!


person caleban    schedule 13.01.2017    source источник


Ответы (4)


Я использую jiq, и мне он очень нравится.

https://github.com/fiatjaf/jiq

Это jid с jq.

Вы можете выполнять детализацию в интерактивном режиме, используя запросы фильтрации jq.

jiq использует jq внутри, и это требует, чтобы у вас было jq в вашем PATH.

Использование aws cli

aws ec2 describe-regions --region-names us-east-1 us-west-1 | jiq

jiq вывод

[Filter]> .Regions
{
  "Regions": [
    {
      "Endpoint": "ec2.us-east-1.amazonaws.com",
      "RegionName": "us-east-1"
    },
    {
      "Endpoint": "ec2.us-west-1.amazonaws.com",
      "RegionName": "us-west-1"
    }
  ]
}
person caleban    schedule 19.01.2017

Возможно, вам придется кататься самостоятельно.

Конечно, сам jq интерактивен в том смысле, что если вы вызовете его без указания ввода JSON, он будет обрабатывать STDIN в интерактивном режиме.

Если вы хотите передать одни и те же данные нескольким программам, вы можете легко написать свою собственную оболочку. На github есть сценарий bash с именем jqplay, который имеет несколько наворотов. Например, если команда ввода начинается с | тогда в качестве входных данных используется самый последний результат.

Пример 1

./jqplay -c spark.json
Enter a jq filter (possibly beginning with "|"), or blank line to terminate:
.[0]
{"name":"Paddington","lovesPandas":null,"knows":{"friends":["holden","Sparky"]}}
.[1]
{"name":"Holden"}
| .name
"Holden"
| .[0:1]
"H"
| length
1
.[1].name
"Holden"

Bye.

Пример 2

./jqplay -n
Enter a jq filter (possibly beginning and/or ending with "|"), or blank line to terminate:
?
An initial | signifies the filter should be applied to the previous jq
output.

A terminating | causes the next line that does not trigger a special
action to be appended to the current line.

Special action triggers:
:exit        # exit this script, also triggered by a blank line
:help        # print this help
:input PATHNAME ...
:options OPTIONS
:save PN     # save the most recent output in the named file provided
               it does not exist
:save! PN    # save the most recent output in the named file 
:save        # save to the file most recently specified by a :save command
:show        # print the OPTIONS and PATHNAMEs currently in effect
:! PN        # equivalent to the sequence of commands
               :save! PN 
               :input PN
?            # print this help
#            # ignore this line

1+2
3
:exit
Bye.
person peak    schedule 13.01.2017
comment
Спасибо, что предложили эти варианты! По какой-то причине, когда я пытаюсь использовать jqplay скрипт, я получаю jq: 1 compile error ошибки, и я еще не изучал их. В итоге я обнаружил jiq в ветке Hacker News, и он делает почти то, что я сейчас хочу. - person caleban; 20.01.2017
comment
@caleban - jiq был разветвлен с github.com/simeji/jid, поэтому мне интересно, знаете ли вы что-нибудь об относительных достоинствах этих двух. Что касается сценария bash - он был протестирован с двумя разными версиями GNU bash (v3 и v4), поэтому я подозреваю, что ошибки, которые вы видите, просто jq обнаруживают какое-то несоответствие между вашим запросом и вводом, который вы даете. Это. Для справки по jqplay: jqplay -h - person peak; 20.01.2017

https://github.com/simeji/jid

n.b. Я не понимаю, насколько строго он следует синтаксису и набору функций jq

person Yuri Schimke    schedule 18.01.2017

Если вы используете Emacs (или хотите), то JQ-режим позволяет вам интерактивно запускать фильтры JQ в текущем буфере документа JSON:

https://github.com/ljos/jq-mode

person Richard Wheeldon    schedule 06.08.2018