2017-11-03 1 views
0

haben die folgende json Ausgabe:Rename JSON Schlüsselfeld mit dem Wert in Objekt

[ 
{ 
    "id": "47", 
    "canUpdate": true, 
    "canDelete": true, 
    "canArchive": true, 
    "info": [ 
     { 
      "key": "problem_type", 
      "value": "PAN", 
      "valueCaption": "PAN", 
      "keyCaption": "Category" 
     }, 
     { 
      "key": "status", 
      "value": 3, 
      "valueCaption": "Closed", 
      "keyCaption": "Status" 
     }, 
     { 
      "key": "insert_time", 
      "value": 1466446314000, 
      "valueCaption": "2016-06-20 14:11:54.0", 
      "keyCaption": "Request time" 
     } 

Wie Sie unter „Info“ sehen sie beschriften tatsächlich den Schlüssel: Wert-Paar als „Schlüssel“: „problem_type“ und " Wert ":" PAN "und dann" valueCaption ":" PAN "" keyCaption ":" Kategorie ". Was ich tun muss, ist die Datei neu zu ordnen, so dass es in diesem Beispiel als "problem_type" angezeigt wird: "PAN" und "Category": "PAN". Was wäre die beste Methode, um die Ausgabe zu wiederholen, um die Schlüssel: Wert-Paare auf diese Weise neu zu ordnen?

Wie es sein muss:

[ 
{ 
    "id": "47", 
    "canUpdate": true, 
    "canDelete": true, 
    "canArchive": true, 
    "info": [ 
     { 
      "problem_type": "PAN", 
      "Category": "PAN" 
     }, 
     { 
      "status": 3, 
      "Status": "Closed" 
     }, 
     { 
      "insert_time": 1466446314000, 
      "Request time": "2016-06-20 14:11:54.0" 
     } 
+0

Was ist Ihr Betriebssystem? – RomanPerekhrest

+0

Welche Programmiersprache benutzen Sie? Kennzeichnen Sie das bitte. – Vasan

+0

Ziehen von Json-Daten vom Linux-Server mithilfe eines Bash-Skripts auf einem Linux-Server. Derselbe Server führt auch ein Skript aus, um die Datei nach dem Abruf zu konvertieren. – Godfried

Antwort

0

Hier ist eine jq Lösung, die Update assignment |=

.[].info[] |= {(.key):.value, (.keyCaption):.valueCaption} 

Sample Run verwendet (übernimmt Daten in data.json)

$ jq -M '.[].info[] |= {(.key):.value, (.keyCaption):.valueCaption}' data.json 
[ 
    { 
    "id": "47", 
    "canUpdate": true, 
    "canDelete": true, 
    "canArchive": true, 
    "info": [ 
     { 
     "problem_type": "PAN", 
     "Category": "PAN" 
     }, 
     { 
     "status": 3, 
     "Status": "Closed" 
     }, 
     { 
     "insert_time": 1466446314000, 
     "Request time": "2016-06-20 14:11:54.0" 
     } 
    ] 
    } 
] 

Try it online at jqplay.org

+0

Brilliant! Vielen Dank. Funktioniert perfekt. – Godfried