通过命令行

时间:2016-06-14 08:44:46

标签: bash shell terminal edit jq

我想使用终端命令或脚本编辑通过终端的json结构。         如果我有一个像这样的json文件结构:

      {
      "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"
          }

        }
      ]
    }

所以在这里我想为数组的每个项添加“Putrequest”和“Item”属性..所以我想要这样的输出:

 {
      "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"
          }
}
}
        }
      ]
    }

我尝试使用Jq,但仍在努力..请帮助我使用命令提示符或bash / shell脚本将这些属性添加到json。 感谢

1 个答案:

答案 0 :(得分:1)

假设您实际上获得了有效的JSON,则以下jq表达式可能对您有用:

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

用法:

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

故障:

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 (.)
      }
    }
  )
)