2017-11-23 3 views

Antwort

1

Anstatt JSON mit Bash oder Python zu manipulieren, können Sie jq verwenden. Zum Beispiel, wenn Sie JSON wie folgt aus:

[ 
    { 
    "solution-id": "foo", 
    "junk": "foo" 
    }, 
    { 
    "solution-id": "bar", 
    "junk": "foo" 
    } 
] 

Und Sie wollen in das verwandeln:

[ 
    { 
    "solution-id": 0, 
    "junk": "foo" 
    }, 
    { 
    "solution-id": 1, 
    "junk": "foo" 
    } 
] 

Sie schreiben:

jq 'to_entries | map(.value["solution-id"] = .key) | map(.value)' file.json 

Was hier geschieht, die to_entries function verwendet eine Array-Eingabe und generiert Schlüssel-Wert-Paare, wobei key eine Folge von Zahlen 0, 1, 2, ..., n ist und value das ursprüngliche Element im Array ist. Die erste map in der Pipeline ist, den Wert mit der Sequenznummer zu ändern, die zweite map ist, den Wert zu extrahieren. Um besser zu verstehen, führen Sie nur jq to_entries' file.json, die Zuordnungen werden mehr Sinn machen.

+0

Dank @janos.! Funktioniert gut gemäß meiner Anforderung. Aber versucht zu interpretieren, was tatsächlich mit "map (.value)" in dem Befehl passiert. – hruday

+0

@hruday dies ist was "to_entries" tut: es nimmt eine Array-Eingabe und generiert Schlüssel-Wert-Paare, wobei key eine Folge von Zahlen 0, 1, 2, ..., n ist, und Wert ist das ursprüngliche Element in das Array. Die erste Map in der Pipeline besteht darin, den Wert mit der Sequenznummer zu ändern, die zweite Map soll den Wert extrahieren. Um es besser zu verstehen, führen Sie einfach 'jq to_entries 'file.json' aus, die Mappings ergeben mehr Sinn. – janos

Verwandte Themen