【问题标题】:Adding One more Parent Attrubute To JSON through Command line通过命令行向 JSON 添加一个父属性
【发布时间】:2016-06-14 08:44:45
【问题描述】:

我想使用终端命令或脚本通过终端编辑 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。 谢谢

【问题讨论】:

  • 请告诉我们你到目前为止在 jq 中的尝试。
  • 你知道它不是有效的 JSON 吗? "S": "Once upon "

标签: bash shell terminal edit jq


【解决方案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 (.)
      }
    }
  )
)

【讨论】:

  • @andlrs: 再次感谢你.. 我确实接受了你的回答:)
  • @Tedd 很高兴能帮到你,现在你应该读两遍,然后自己重​​写 :-)
  • @andlrs:我在这里还有一个查询:如果我想从 Json 上方将“Hello”更改为“Stage_Hello”和“Music”更改为“stage_Music”,我可以使用 Jq 做什么。?
  • @Tedd 将| .State_Music = .Music | del(.Music) 添加到 jq 命令的末尾可能会起作用:jq 'map_values(map({"PutRequest": { "Item": .}})) | .State_Music = .Music | del(.Music)'
  • @andlrs : 非常感谢.. 它有效.. 但是最后一个查询.. 我们可以让它通用.. 比如:我想将“Dev_”、“Prod_”附加到“Hello”和“音乐”[如:“Dev_Hello”] 根据要求,我是否想要它用于 Dev/prod.. 就像添加条件.. 如果它的“Dev”那么我希望“Hello”成为“Dev_Hello”..跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 2018-08-19
  • 2019-08-10
  • 1970-01-01
相关资源
最近更新 更多