2017-03-13 3 views
1
{ 
    "prodid_876006": { 
     "serid": [{ 
      "seridone": "3265874" 
     }, { 
      "seridtwo": "21458915" 
     }], 
     "serials": ["028915"] 
    }, 
    "prodid_980": { 
     "serid": [{ 
      "seridone": "32743214" 
     }, { 
      "seridtwo": "5469872" 
     }], 
     "serials": ["192147","1632589"] 
    } 
} 

gewünschtes Ausgangstransformieren: für jedes json Objekt, extrahiert die prodid_ info, und die Serien-Array, und eine neue json Datei mit dem folgende Format:jq neues json erstellen, indem ein bestehendes

{  
"prodid_876006" : ["028915"], 
"prodid_980" : ["192147","1632589"] 
} 

was wäre der jq Befehl dafür?

keys ,.[].serials 

gibt mir folgendes:

[ 
    "prodid_876006", 
    "prodid_980" 
] 
[ 
    "028915" 
] 
[ 
    "192147", 
    "1632589" 
] 

aktualisiert Frage:

wie könnte ich in einem anderen json erhalten auch die folgende Ausgabe? (Hier der Schlüssel ist, jedes Element der Arrays Reihe, und der Wert ist der Schlüssel des ersten Probe json):

{  
"028915" : ["prodid_876006"], 
"192147" : ["prodid_980"], 
"1632589" : ["prodid_980"] 
} 

Antwort

2

Etwas wie dies funktioniert, in dem man ein Array von Schlüssel-Wert-Paaren und Rohr extrahiert zu from_entries:

% jq '[to_entries[] | {"key": .key, "value": .value.serials}] | from_entries' 42762941.json 
{ 
    "prodid_876006": [ 
    "028915" 
    ], 
    "prodid_980": [ 
    "192147", 
    "1632589" 
    ] 
} 
+1

es wahrscheinlich eine neue Frage ist, wie könnte die oben verändert werden, so dass sie als Schlüssel jeder eindeutige Serien zu haben, und als Wert, der entsprechende prodids? – dessie

Verwandte Themen