XMLstarlet para JSON?

4

Existe uma ferramenta que é semelhante a XMLstarlet , mas funciona em JSON em vez de XML?

My usecase: extrai certos valores de documentos JSON hierárquicos, pois eles são retornados por algumas APIs REST.

Algo como poder selecionar um nó por meio de uma expressão semelhante a XPath seria útil lá.

    
por maxschlepzig 09.01.2016 / 10:09

1 resposta

8

jq fornece um rico idioma de expressão para selecionar elementos de um documento JSON.

Assim, é semelhante ao comando sel de xmlstartlet (que recebe uma expressão XPath).

Por exemplo, para extrair uma lista das versões disponíveis do kernel do CentOS 7 no oceano digital - em um formato de registro:

$ jq '[ .kernels[] | select(.name | test("^CentOS 7 x64")) | del(.name)
        | "\(.version) \(.id)"] | .[]' kernels.json

Ou o mesmo simplificou um pouco:

jq '.kernels[] | select(.name | test("^CentOS 7 x64")) |
     "\(.version) \(.id)" ' kernels.json

Onde o json pode ser obtido assim:

$ curl -o kernels.json -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $bearer" \
 "https://api.digitalocean.com/v2/droplets/$droplet/kernels?page=1&per_page=1000"

Há também ObjectPath , uma linguagem de consulta diferente para JSON - embora jq pareça estar mais disponível (por exemplo, é empacotado no Fedora 23).

Reutilizar esses snippets de consulta em programas é facilmente possível, por exemplo, existem várias ligações para jq (por exemplo, para Python ) e o ObjectPath também está disponível como módulo Python.

    
por 09.01.2016 / 12:39

Tags