2016-06-27 14 views
9

Sagen, ich habe den Eingang:jq: Ausgabe-Array von JSON-Objekte

{ 
    "name": "John", 
    "email": "[email protected]" 
} 
{ 
    "name": "Brad", 
    "email": "[email protected]" 
} 

Wie bekomme ich die Ausgabe:

[ 
    { 
     "name": "John", 
     "email": "[email protected]" 
    }, 
    { 
     "name": "Brad", 
     "email": "[email protected]" 
    } 
] 

Ich habe versucht, beide:

jq '[. | {name, email}]' 

und

jq '. | [{name, email}]' 

die beide mir die Ausgabe gab

[ 
    { 
     "name": "John", 
     "email": "[email protected]" 
    } 
] 
[ 
    { 
     "name": "Brad", 
     "email": "[email protected]" 
    } 
] 

ich in den Dokumentationen für ein Array-Ausgang, keine Optionen haben, sind auch jede Hilfe dankbar

+0

Wie gebe ich dem neuen Array einen Namen, anstatt ein anonymes Array zu sein? Also {"Leute": [{"Name": "Brad", "E-Mail": "[email protected]"}]} – archcutbank

+0

@ user372429 würden Sie einfach die {people:} um Ihre Ausgabe wickeln, so sollte es aussehen etwas wie: jq -s '{Leute:. } '

Antwort

10

Verwenden schlürfen Modus:

o --slurp/-s: 

     Instead of running the filter for each JSON object 
     in the input, read the entire input stream into a large 
     array and run the filter just once. 
$ jq -s '.' < tmp.json 
[ 
    { 
    "name": "John", 
    "email": "[email protected]" 
    }, 
    { 
    "name": "Brad", 
    "email": "[email protected]" 
    } 
] 
+0

Perfekt, danke! Wird akzeptieren, wenn die Zeit abgelaufen ist –