working - Use jq para analisar uma string JSON




shell script working with json (2)

Estou tentando fazer com que o jq analise uma estrutura JSON como:

{
  "a" : 1,
  "b" : 2,
  "c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}

Ou seja, um elemento no JSON é uma string com json com escape.

Então, eu tenho algo nos moldes do $ jq [.c] myFile.json | jq [.id] $ jq [.c] myFile.json | jq [.id]

Mas isso falha com jq: error: Cannot index string with string

Isso ocorre porque a saída de .c é uma string, não mais JSON. Como obtenho o jq para analisar essa string?

Minha solução inicial é usar sed para substituir todos os caracteres de escape ( \":\" , \",\" e \" ), mas isso é confuso, eu suponho que há uma maneira de fazer jq fazer isso?

Obrigado!

edit: Além disso, a versão jq disponível aqui é:

$ jq --version
jq version 1.3

Eu acho que poderia atualizá-lo, se necessário.


Você pode usar a saída bruta (-r) que irá remover os caracteres:

jq -r .c myfile.json | jq .id

ADENDO: Isto tem a vantagem de funcionar em jq 1.3 e acima; na verdade, ele deve funcionar em todas as versões do jq que tem a opção -r.


jq tem o fromjson embutido para isso:

jq '.c | fromjson | .id' myFile.json

fromjson foi adicionado na versão 1.4.





jq