Wie konvertieren von beliebigen einfachen JSON, CSV mit jq?

Mit jq, wie kann beliebige JSON-Kodierung ein array von flache Objekte umgewandelt werden, um CSV?

Es gibt viele F&auf dieser Website, die auf spezifische Daten-Modelle, die hard-code die Felder, aber die Antworten auf diese Frage soll die Arbeit gegeben, JSON, mit der einzigen Einschränkung, dass es ist ein array von Objekten mit skalaren Eigenschaften (keine tiefen/Komplex/sub-Objekte, wie diese Abflachung ist eine andere Frage). Das Ergebnis sollte eine Kopfzeile geben Sie die Feldnamen. Bevorzugt werden Antworten, dass die Erhaltung der Feld-Reihenfolge der das erste Objekt, aber es ist keine Voraussetzung. Ergebnisse können schließen Sie alle Zellen mit doppelten Anführungszeichen, oder nur schließen diejenigen, die das setzen in Anführungszeichen benötigen (z.B. 'a,b').

Beispiele

  1. Eingang:

    [
        {"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
        {"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
        {"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
        {"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
    ]

    Möglich-Ausgang:

    code,name,level,country
    NSW,New South Wales,state,AU
    AB,Alberta,province,CA
    ABD,Aberdeenshire,council area,GB
    AK,Alaska,state,US

    Möglich-Ausgang:

    "code","name","level","country"
    "NSW","New South Wales","state","AU"
    "AB","Alberta","province","CA"
    "ABD","Aberdeenshire","council area","GB"
    "AK","Alaska","state","US"
  2. Eingang:

    [
        {"name": "bang", "value": "!", "level": 0},
        {"name": "letters", "value": "a,b,c", "level": 0},
        {"name": "letters", "value": "x,y,z", "level": 1},
        {"name": "bang", "value": "\"!\"", "level": 1}
    ]

    Möglich-Ausgang:

    name,value,level
    bang,!,0
    letters,"a,b,c",0
    letters,"x,y,z",1
    bang,"""!""",0

    Möglich-Ausgang:

    "name","value","level"
    "bang","!","0"
    "letters","a,b,c","0"
    "letters","x,y,z","1"
    "bang","""!""","1"
InformationsquelleAutor outis | 2015-10-06
Schreibe einen Kommentar