Comment ne pas se laisser jq interpréter le caractère de saut de ligne lors de l'exportation au format CSV

0

La question

Je veux convertir le JSON suivants contenu stocké dans un fichier 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"
           }
        ]
    ]
}

dans une sortie CSV

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

Quand je l'utilise jq de commande, cependant,

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

J'obtiens ce résultat:

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

Comment le jq commande écrite pour obtenir le désiré CSV résultat?

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

La meilleure réponse

3

Pour une jq seule solution, vous pouvez utiliser gsub("\n"; "\\n"). J'irais avec quelque chose comme ceci:

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

À l'aide de votre JSON et en invoquant avec l'option-r option de ligne de commande, on obtient:

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

Si les retours à la ligne sont la seule chose que vous pouvez gérer, peut-être vous pouvez faire une chaîne de caractères de remplacement.

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

@rchrome, ce qui provoque un Segmentation fault (core dumped) dans mon CentOS7 de la machine. Je ne sais pas pourquoi.
hermit.crab

hmm intéressant, il fonctionne sur mon ubuntu 16.04 machine avec jq version 1.5.1
rchome

@rchrome, les édité solution fonctionne maintenant dans mon CentOS7 de la machine. je vous remercie.
hermit.crab

Dans d'autres langues

Cette page est dans d'autres langues

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