Um mini-jq: uma ferramenta de linha de comando em Rust que consulta JSON
por caminho (.items[*].name). Lê JSON da entrada padrão, aplica o caminho e
imprime o resultado. Núcleo puro (parser de caminho + consulta) com cobertura de
testes 100% (linhas); o main é só a casca de I/O.
echo '{"items":[{"name":"Ada"},{"name":"Grace"}]}' | jpath '.items[*].name'
# "Ada"
# "Grace"| Sintaxe | Significado | Exemplo |
|---|---|---|
.campo |
acessa um campo de objeto | .user.name |
[i] |
índice de array | .items[0] |
[*] |
curinga: mapeia sobre o array | .items[*].price |
. (ou vazio) |
a raiz (o valor inteiro) | . |
Encadeie à vontade: .data.users[*].email. O ponto inicial é opcional
(items[0] funciona igual a .items[0]).
jq é maravilhoso e gigante. Este é o oposto: um recorte pequeno o suficiente
para caber na cabeça — dá pra ler o parser inteiro em cinco minutos e entender
como um caminho vira uma travessia de estrutura. É um exercício de escrever uma
mini-linguagem, com o núcleo 100% testado (incluindo os caminhos de erro).
cargo build --release
echo '{"a":{"b":[10,20,30]}}' | ./target/release/jpath '.a.b[1]' # 20
# instalar no PATH:
cargo install --path .
cat dados.json | jpath '.registros[*].id'Códigos de saída: 0 sucesso · 1 caminho não casou (campo/índice ausente) ·
2 uso incorreto ou JSON inválido.
src/
├── lib.rs # parse_path() + query() + erros — 100% testado (cargo-llvm-cov)
└── main.rs # casca: lê stdin/args, imprime, mapeia erros para exit codes
cargo test
cargo llvm-cov --ignore-filename-regex 'main\.rs' --summary-only # linhas: 100%MIT.