Estou tentando jq
analisar uma estrutura JSON como:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
Ou seja, um elemento no JSON é uma string com json de escape.
Então, eu tenho algo na linha de
$ jq [.c] myFile.json | jq [.id]
Mas isso trava com jq: error: Cannot index string with string
Isso ocorre porque a saída de .c é uma string, não mais JSON. Como faço para que o jq analise essa string?
Minha solução inicial é usar o sed para substituir todos os caracteres de escape ( \":\"
, \",\"
e \"
), mas isso é confuso, eu supor que há uma maneira interna para jq
fazer isso?
Obrigado!
editar: Além disso, a versão jq disponível aqui é:
$ jq --version
jq version 1.3
Acho que posso atualizá-lo se necessário.
Respostas:
jq tem o
fromjson
embutido para isso:jq '.c | fromjson | .id' myFile.json
fromjson
foi adicionado na versão 1.4.fonte
fromjson
recurso não está disponível. Em outras palavras, mesmo que essa resposta seja interessante, ela não responde à pergunta.jq 'fromjson | .' myfile
:, onde meuarquivo contém"{\"key\":1, \"word\":\"cat\"}"
Você pode usar a saída bruta (-r) que removerá o escape dos caracteres:
jq -r .c myfile.json | jq .id
ADENDO: Tem a vantagem de funcionar no jq 1.3 e superiores; na verdade, ele deve funcionar em todas as versões do jq que possuem a opção -r.
fonte