2016-06-14 7 views
0

Ich möchte die Struktur von Json über Terminal mit Terminalbefehlen oder Skripten bearbeiten. Wenn ich eine JSON-Datei-Struktur wie folgt aus:Eine weitere Parentattribute zu JSON über die Befehlszeile hinzufügen

 { 
     "Helloo": [ 
     { 

      "AlbumTitle": { 
      "S": "Famous" 
      }, 
      "SongTitle": { 
      "S": "Call Me Today" 
      }, 
      "Artist": { 
      "S": "No One You Know" 
      } 

     }, 
{ 

      "AlbumTitle": { 
      "S": "Famous1" 
      }, 
      "SongTitle": { 
      "S": "Call Me Today1" 
      }, 
      "Artist": { 
      "S": "No One You Know11" 
      } 

     } 
     ], 
     "Music": [ 
     { 

      "Album": { 
      "S": "Pop Songs" 
      }, 
      "Production": { 
      "S": "X-series" 
      }, 
      "Song": { 
      "S": "Once upon 
      }, 
      "Artist": { 
      "S": "XYZ" 
      } 

     } 
     ] 
    } 

So, hier will ich „Putrequest“ und „Item“ Attribute jedes Element des Arrays hinzuzufügen .. Also ich möchte die Ausgabe wie folgt aus:

{ 
     "Helloo": [ 
     { 
     PutRequest":{ 
      "Item":{ 

      "AlbumTitle": { 
      "S": "Famous" 
      }, 
      "SongTitle": { 
      "S": "Call Me Today" 
      }, 
      "Artist": { 
      "S": "No One You Know" 
      } 

     } 
     } 
     }, 
{ 
PutRequest":{ 
      "Item":{ 

      "AlbumTitle": { 
      "S": "Famous1" 
      }, 
      "SongTitle": { 
      "S": "Call Me Today1" 
      }, 
      "Artist": { 
      "S": "No One You Know11" 
      } 

     } 
     } 
     } 
     ], 
     "Music": [ 
     { 
PutRequest":{ 
      "Item":{ 
      "Album": { 
      "S": "Pop Songs" 
      }, 
      "Production": { 
      "S": "X-series" 
      }, 
      "Song": { 
      "S": "Once upon 
      }, 
      "Artist": { 
      "S": "XYZ" 
      } 
} 
} 
     } 
     ] 
    } 

Ich habe versucht, Jq dafür zu verwenden, aber immer noch kämpfen .. Bitte helfen Sie mir, diese Attribute zu Json mit Eingabeaufforderung oder Bash/Shell-Skripting hinzuzufügen. Dank

+1

Bitte zeigen Sie uns, was Sie habe bisher in jq versucht. – cb0

+0

Sie wissen, dass es kein gültiges JSON ist? '" S ":" Once up "<- Missing quote' "' – andlrc

Antwort

1

Angenommen, Sie tatsächlich bekam gültig JSON folgende jq Ausdruck könnte für Sie arbeiten:

map_values(map({"PutRequest": { "Item": .}})) 

Verbrauch:

jq 'map_values(map({"PutRequest": { "Item": .}}))' file.json 

Aufteilung:

map_values(   # Map values iterate over an object and assign the 
         # returned value to the property 
    map(    # Map iterate over an array and assign the returned value 
         # to the index, and creates a new array if an object is 
         # mapped 
    {     # Return an object 
     "PutRequest": { # With PutRequest as a property 
     "Item": .  # And Item, which contains the value (.) 
     } 
    } 
) 
) 
+0

@andlrs: Danke sooo viel .. Du hast mein Problem gelöst .. – Tedd

+0

@andlrs: Danke noch einmal .. Ich habe deine Antwort angenommen :) – Tedd

+0

@Tedd Ich bin froh, dass ich dir helfen konnte, jetzt solltest du es zweimal lesen und es selbst umschreiben :-) – andlrc