Created segunda-feira 28 junho 2021 @cheatsheet
-s
(slurp) "sorve" um fluxo de vários documentos JSON (AKA "JSON Lines") para uma array. O filtro só recebe esta array.-r
(raw) Se o meu filtro produzir uma stream de strings, isto tira as aspas no output. Útil para passar para outros comandos.-C
(colors) Combina bem comless -r
- String interplation:
"\(.filtro.aqui)"
É muito fixe com-r
em shell scripts!! .[]
, also, dá para fatiar arrays e usar indexes negativosto_entries | map | from_entries
- CHAMA-SE
select
(filter/1
não existe. Ah, e se for com uma array deve ser… | map(select(…))
) - Posso indexar arrays quase como em Python (ex.:
.[-1]
)
-
jid — Explorar JSON interativamente no terminal, com uma sintaxe parecida à do jq mas limitada a member operators (
.
e[]
) -
jiq — jid, mas com jq!
-
gron — Torna input em JSON "grep"-ável. Traz um
ungron
para fazer pipelines com outras ferramentas que trabalham com streams de texto. -
Jo — A shell command to create JSON (HN)
-
jless — a command-line JSON viewer -- muitos vim-like commands para explorar um JSON, parece muito fixe de se ter!!
-
fx — a command-line JSON viewer — mesma coisa [Go] que também permite escrever Reducers em JavaScript, Python ou Ruby
-
JJ — JSON Stream Editor — Written in Go, com desempenho fixe para operações mais simples
-
Há um playground online: https://jqplay.org/
-
Há uma extensão fixe para se trabalhar com jq no Visual Studio Code
-
Para iterar mais rapidamente na linha de comandos:
up
— Ultimate PlumberAlt + A
no ZSH
-
fq — jq for binary formats — tool, language and decoders for working with binary and text formats
-
kellyjonbrazil/jc — CLI tool and python library that converts the output of popular command-line tools and file-types to JSON or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.
-
PowerShell!!
ConvertTo/From-Json
- xidel — Seletores de CSS, XPath e XQuery 3.0
- htmlq — Só seletores de CSS
- Mas isto é mais parecido a um
grep
para HTML do que a umjq
, que por sua vez é mais umawk
"generator-oriented" para JSON
- Mas isto é mais parecido a um
- xmlstarlet — para XML
- xml2 — Algo ainda melhor para XML
- Alternative operator:
//
- try-catch:
try EXP catch EXP
- Update-assignment:
|=
vs. plain assignment:=
- Append to an array:
.posts[].comments |= . + ["this is great"]
- Any filter may be used on the left-hand side of an equals *
- Append to an array:
docker events --since '2021-06-24' --until 10h --format='{{json .}}'
| head
| jq -C '
select(.Type == "network")
| .time |= (gmtime | strftime("%d/%m (%A) %H:%M"))
| del(.timeNano, .scope)
// ^ Aqui teria sido melhor fazer {propriedades, que, me, interessam}
'
| less -r
❯ curl -s 'http://192.168.0.1/goform/goform_get_cmd_process?cmd=station_list'
-e http://192.168.0.1/index.html
| jq -r '((.[][0] | keys_unsorted) , (.[][] | map(.))) | @tsv'
| column -t
#----------------------------------------------
# Resposta do router:
#----------------------------------------------
{"station_list":[{"mac_addr":"50:b7:c3:5c:8e:04","hostname":"samsung-arch","ip_addr":"192.168.0.115"},{"mac_addr":"84:5c:f3:2a:56:98","hostname":"PTLAP0876","ip_addr":"192.168.0.116"},{"mac_addr":"c2:d6:83:8c:09:7c","hostname":"iPhoneFatima","ip_addr":"192.168.0.113"},{"mac_addr":"f4:f5:d8:ea:1a:ee","hostname":"Chromecast","ip_addr":"192.168.0.161"}]}
#----------------------------------------------
# Output final:
#----------------------------------------------
mac_addr hostname ip_addr
50:b7:c3:5c:8e:04 samsung-arch 192.168.0.115
84:5c:f3:2a:56:98 PTLAP0876 192.168.0.116
c2:d6:83:8c:09:7c iPhoneFatima 192.168.0.113
f4:f5:d8:ea:1a:ee Chromecast 192.168.0.161
Inspirado nesta resposta: https://stackoverflow.com/questions/39139107/how-to-format-a-json-string-as-a-table-using-jq/54854136#54854136
jqjq — jq escrito em jq, pelo criador do fq