Cómo no vamos a jq interpretar el carácter de nueva línea al exportar a CSV

0

Pregunta

Quiero convertir el siguiente JSON contenido almacenado en un archivo 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"
           }
        ]
    ]
}

en un CSV de salida

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

Cuando yo uso este jq comando, sin embargo,

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

Me sale este resultado:

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

Cómo debe ser la jq comando de ser escrito para obtener la deseada CSV resultado?

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

Mejor respuesta

3

Para un jq-la única solución, puede utilizar gsub("\n"; "\\n"). Me gustaría ir con algo como esto:

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

Utilizando su JSON y la invocación de este con el comando-r opción de línea de producción:

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

Si las nuevas líneas son la única cosa que usted puede manejar, tal vez usted puede hacer una cadena de reemplazo.

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

@rchrome, esto provoca un Segmentation fault (core dumped) en mi CentOS7 de la máquina. No sé por qué.
hermit.crab

hmm interesante, que funciona en mi ubuntu 16.04 máquina con jq la versión 1.5.1
rchome

@rchrome, editada solución ahora funciona en mi CentOS7 de la máquina. gracias.
hermit.crab

En otros idiomas

Esta página está en otros idiomas

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