如何使用带有jq解析器的shell脚本分离所有键和值并存储在数组中

时间:2017-03-08 15:35:52

标签: json bash shell grep jq

我有一个像这样的JSON文件:

{
 "images1" : 
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@2x.png",
      "scale" : "2x"
    },
 "images2" : 
    {
      "size" : "29x30",
      "idiom" : "iphone2",
      "filename" : "Icon-Small@2x.png2",
      "scale" : "22x"
    }
}

我将传递JSON对象名作为输入。所以,如果我知道" images1"是对象,然后我需要将该对象的所有键和值存储在两个单独的数组中,以便我可以在进一步处理中使用它们。

非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

jq ".$1 | { keys: keys_unsorted, values: [.[]] }"

其中$1应提供您要解决的项目的名称(请注意,这假设您在脚本中使用此项。您可能希望使用fedorqui的替代方案)

它将生成一个对象,其keys属性将是$1values键的数组,其中包含相关值的数组:

$ echo '{
 "images1" :
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@2x.png",
      "scale" : "2x"
    },
 "images2" :
    {
      "size" : "29x30",
      "idiom" : "iphone2",
      "filename" : "Icon-Small@2x.png2",
      "scale" : "22x"
    }
}' | jq ".images1 | { keys: keys_unsorted, values: [.[]] }"
{
  "keys": [
    "size",
    "idiom",
    "filename",
    "scale"
  ],
  "values": [
    "29x29",
    "iphone",
    "Icon-Small@2x.png",
    "2x"
  ]
}