Exporte JSON para CSV com cabeçalhos usando JQ

0

Eu tenho um arquivo JSON (dicionário?), semelhante a:

{
  "Salad": {
    "name": "Dressing",
    "good": true,
    "status": true
  },
  "Data_XML": {
    "name": "XML",
    "good": false
  },
  "Functionality": {
    "name": "FUNC",
    "good": true
  },
  "Data_JSON": {
    "name": "JSON",
    "good": true,
    "status": false
  }
}

Estou procurando uma saída de CSV como esta:

"title","good","name","status"
"Salad",true,"Dressing",true
"Data_XML",false,"XML",""
"Functionality",true,"FUNC",""
"Data_JSON",true,"JSON",false

O que eu encontrei e usado até agora é isso ...

jq -r '(map(keys_unsorted) | add | unique) as $cols | $cols, map(. as $row | $cols | map($row[.]))[] | @csv'

Saída:

"good","name","status"
true,"Dressing",true
false,"XML",
true,"FUNC",
true,"JSON",false

Eu precisaria do equivalente a Salad, Data_XML, Funcionalidade e Data_JSON como PRIMEIRA COLUNA (não classificada) juntamente com os dados relacionados.

Quanto ao "bom", "nome", "status" , esses seriam os campos Cabeçalho e, como tal, precisariam ser recuperados dinamicamente como eles são aleatório (cada conjunto de dados pode ter 4 e outros, até 10). É um arquivo relativamente grande e seria difícil analisá-los manualmente, deixando o "título" como o item de cabeçalho da primeira coluna. "título", "bom", "nome", "estado", "algo", "mais", "aleatório", "etc"

Eu sinto que estou tão perto ... Qualquer ajuda é muito apreciada!

    
por TechStud 04.07.2018 / 04:01

1 resposta

1

Acho que isso funcionará:

jq  -r '["title","name","good","status"],(to_entries|.[]|  
        [.key,.value.good,.value.name,
          (if .value.status == null then "" else .value.status end )]
        )|@csv'

Nova versão mais genérica

jq -r ' to_entries as $row | 
  ( ( map(keys_unsorted ) | add | unique ) as $cols |
    ( ["title" , $cols] | flatten) , 
  ( $row | .[] as $onerow | $onerow | 
       ( [ .key , ( $cols |   
           map ($onerow.value[.] as $v | if $v == null then "" else $v end )  ) ] 
         | flatten ) ) ) | @csv '
    
por 04.07.2018 / 06:19