2016-04-13 6 views
0

Intro

Ich habe recherchiert und versucht, dies für 2 Tage. Es ist mir nicht gelungen, eine ähnliche Frage zu finden oder selbst eine Antwort zu finden.jq: ein einzelnes Feld bearbeiten, während das CSV-Umwandlung

Ich habe folgende JSON Nutzlast (von VRA APIs)

{ "content": [ 
{ 
    "@type": "CatalogResource", 
    "id": "ccc", 
    "iconId": "xxx", 
    "resourceTypeRef": { 
    "id": "Infrastructure.Virtual", 
    "label": "Virtual Machine" 
}, 
    "name": "name01", 
    "description": "example01", 
    "status": "ACTIVE", 
    "catalogItem": { 
    "id": "xxxxx", 
    "label": "xxxxx" 
}, 
    "requestId": "xxxxx", 
    "providerBinding": { 
    "bindingId": "xxxx", 
    "providerRef": { 
     "id": "xxxxx", 
     "label": "xxxxx" 
    } 
}, 
    "owners": [ 
    { 
     "tenantName": "xxxxx", 
     "ref": "xxxxxxxx", 
     "type": "USER", 
     "value": "xxxxxxxxx" 
    } 
    ], 
    "organization": { 
    "tenantRef": "xxxx", 
    "tenantLabel": "xxxxxxx", 
    "subtenantRef": "xxxxxx", 
    "subtenantLabel": "xxxxxxxxx" 
}, 
    "dateCreated": "2015-10-05T08:58:35.133Z", 
    "lastUpdated": "2015-12-03T13:23:54.187Z", 
    "hasLease": true, 
    "lease": { 
    "start": "2015-10-05T08:21:31.000Z" 
}, 
    "leaseForDisplay": null, 
    "hasCosts": true, 
    "costs": { 
    "leaseRate": { 
     "type": "moneyTimeRate", 
     "cost": { 
     "type": "money", 
     "currencyCode": "GBP", 
     "amount": 99999 
     }, 
     "basis": { 
     "type": "timeSpan", 
     "unit": "DAYS", 
     "amount": 1 
     } 
    } 
}, 
    "costToDate": { 
    "type": "money", 
    "currencyCode": "GBP", 
    "amount": 19181 
}, 
    "totalCost": null, 
    "childResources": [], 
    "operations": null, 
    "forms": { 
    "catalogResourceInfoHidden": true, 
    "details": { 
     "type": "extension", 
     "extensionId": "xxxxxx", 
     "extensionPointId": null 
    } 
    }, 
    "resourceData": { 
    "entries": [] 
    } 
}, 
{ 
    "@type": "CatalogResource", 
    "id": "ccc", 
    "iconId": "xxx", 
    "resourceTypeRef": { 
    "id": "Infrastructure.Virtual", 
    "label": "Virtual Machine" 
    }, 
    "name": "name01", 
    "description": "this, is, my, problem", 
    "status": "ACTIVE", 
    "catalogItem": { 
    "id": "xxxxx", 
    "label": "xxxxx" 
    }, 
    "requestId": "xxxxx", 
    "providerBinding": { 
    "bindingId": "xxxx", 
    "providerRef": { 
     "id": "xxxxx", 
     "label": "xxxxx" 
    } 
    }, 
    "owners": [ 
    { 
     "tenantName": "xxxxx", 
     "ref": "xxxxxxxx", 
     "type": "USER", 
     "value": "xxxxxxxxx" 
    } 
    ], 
    "organization": { 
    "tenantRef": "xxxx", 
    "tenantLabel": "xxxxxxx", 
    "subtenantRef": "xxxxxx", 
    "subtenantLabel": "xxxxxxxxx" 
    }, 
    "dateCreated": "2015-10-05T08:58:35.133Z", 
    "lastUpdated": "2015-12-03T13:23:54.187Z", 
    "hasLease": true, 
    "lease": { 
    "start": "2015-10-05T08:21:31.000Z" 
    }, 
    "leaseForDisplay": null, 
    "hasCosts": true, 
    "costs": { 
    "leaseRate": { 
     "type": "moneyTimeRate", 
     "cost": { 
     "type": "money", 
     "currencyCode": "GBP", 
     "amount": 99999 
     }, 
     "basis": { 
     "type": "timeSpan", 
     "unit": "DAYS", 
     "amount": 1 
     } 
    } 
    }, 
    "costToDate": { 
    "type": "money", 
    "currencyCode": "GBP", 
    "amount": 19181 
    }, 
    "totalCost": null, 
    "childResources": [], 
    "operations": null, 
    "forms": { 
    "catalogResourceInfoHidden": true, 
    "details": { 
     "type": "extension", 
     "extensionId": "xxxxxx", 
     "extensionPointId": null 
    } 
    }, 
    "resourceData": { 
    "entries": [] 
    } 
} 
] 
} 

ich es in CSV konvertieren wie folgt:

jq --raw-output -r '.content[0] | [.name,.id,.resourceTypeRef.label,.description,.status,.catalogItem.label,.owners[0].value,.dateCreated,.costs.leaseRate.cost.amount,.costToDate.amount] | @csv' 

Frage

Ich brauche das .beschreibung Feld bearbeiten und entferne Kommas, wenn sie vorhanden sind.

Ich suche nach einem jq Weg, es zu tun; Ich könnte es auf Shell-Ebene mit sed oder awk tun, aber ich würde gerne wissen, ob es möglich ist mit jq innerhalb des gleichen Befehls, den ich verwenden, um die CSV zu generieren.

Danke !!

+0

Der jq Befehl funktioniert nicht – hek2mgl

+0

Sie haben Recht und ich entschuldige mich. Der JSON-Code war ein Auszug. Es ist immer noch ein Auszug des gesamten JSON, der vom VRA-Aufruf zurückgegeben wurde, aber ich habe ihn jetzt geändert und er sollte mit dem * jq * -Beispiel arbeiten. Danke – Benedetto

Antwort

2

Sie können gsub/2 verwenden, um die Ersetzungen mit regulären Ausdrücken durchzuführen. Also für den Beschreibungsteil, den Ersatz tun.

(.description | gsub(","; "")) 
+0

es funktioniert! Ich hatte die Klammer um den Eintrag nicht. Danke vielmals! – Benedetto

+0

Ja, Sie müssen vorsichtig mit der Vorrangstellung des Betreibers sein. Die Pfeife ist nicht so hoch wie du vielleicht denkst. –