Como não deixar que jq interpretar o caractere de nova linha ao exportar para CSV

0

Pergunta

Eu quero converter os seguintes JSON conteúdo armazenado em um arquivo tmp.json

{
    "results": [
        [
           {
               "field": "field1",
               "value": "value1-1"
           },
           {
               "field": "field2",
               "value": "value1-2\n"
           }
        ],
        [
           {
               "field": "field1",
               "value": "value2-1"
           },
           {
               "field": "field2",
               "value": "value2-2\n"
           }
        ]
    ]
}

em uma saída CSV

"field1","field2"
"value1-1","value1-2\n"
"value2-1","value2-2\n"

Quando eu uso esse jq de comando, no entanto,

 cat tmp.json | jq -r '.results | (first | map(.field)), (.[] | map(.value)) | @csv'

Eu obter esse resultado:

"field1","field2"
"value1-1","value1-2
"
"value2-1","value2-2
"

Como deve ser o jq comando a ser escrito para conseguir o desejado CSV resultado?

export-to-csv jq json
2021-11-24 06:09:08
2

Melhor resposta

3

Para um jq-única solução, você pode usar gsub("\n"; "\\n"). Gostaria de ir com algo como isto:

.results
| (.[0] | map(.field)),
  (.[]  | map( .value | gsub("\n"; "\\n")))
| @csv

Usando o JSON e invocando este com o-r opção de linha de comando produz:

"field1","field2"
"value1-1","value1-2\n"
"value2-1","value2-2\n"
2021-11-24 06:57:07
1

Se quebras de linha são a única coisa que você pode segurar, talvez você possa fazer uma seqüência de caracteres de substituição.

cat tmp.json | jq -r '.results | (first | map(.field)), (.[] | map(.value) | map(gsub("\\n"; "\\n"))) | @csv'
2021-11-24 06:48:27

@rchrome, isso faz com que uma Segmentation fault (core dumped) na minha CentOS7 máquina. Não sei por que.
hermit.crab

hmm interessante, ele funciona no meu ubuntu 16.04 máquina com jq versão 1.5.1
rchome

@rchrome, editado solução agora funciona no meu CentOS7 máquina. obrigado.
hermit.crab

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................