Come non lasciare jq interpretare il carattere di nuova riga quando si esporta in CSV

0

Domanda

Voglio convertire il seguente contenuto JSON memorizzati in un file 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"
           }
        ]
    ]
}

in un output CSV

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

Quando uso questo jq di comando, tuttavia,

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

Ottengo questo risultato:

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

Come dovrebbe essere la jq comando di essere scritta per ottenere il desiderato CSV risultato?

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

Migliore risposta

3

Per un jq-unica soluzione, è possibile utilizzare gsub("\n"; "\\n"). Mi piacerebbe andare con qualcosa di simile a questo:

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

Utilizzando il JSON e la chiamata di questo con i -r opzione della riga di comando si ottiene:

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

Se i ritorni a capo sono l'unica cosa che si può gestire, forse si può fare una sostituzione.

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

@rchrome, questo provoca una Segmentation fault (core dumped) nel mio CentOS7 macchina. Non so perché.
hermit.crab

hmm interessante, funziona sul mio ubuntu 16.04 macchina con jq versione 1.5.1
rchome

@rchrome, modificato soluzione ora funziona nel mio CentOS7 macchina. grazie.
hermit.crab

In altre lingue

Questa pagina è in altre lingue

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