jQuery将对象转换为数组

时间:2020-01-02 14:01:44

标签: json jq

我有以下文件“ Pokemon.json”,它是一个神奇宝贝的精简列表,列出了它们的神奇宝贝ID,名称和对象类型数组。

[{
  "name": "onix",
  "id": 95,
  "types": [{
      "slot": 2,
      "type": {
        "name": "ground"
      }
    },
    {
      "slot": 1,
      "type": {
        "name": "rock"
      }
    }
  ]
}, {
  "name": "drowzee",
  "id": 96,
  "types": [{
    "slot": 1,
    "type": {
      "name": "psychic"
    }
  }]
}]

我想要实现的输出是,提取类型对象的名称值并将其插入数组。 我可以使用

轻松获得所有类型的数组
jq -r '.pokemon[].types[].type.name' pokemon.json

但是我缺少将name字段转换为它自己的数组的关键部分

[ {
  "name": "onix",
  "id": 95,
  "types": [ "rock", "ground" ]
}, {
  "name": "drowzee",
  "id": 96,
  "types": [ "psychic" ]
} ]

任何帮助表示感谢,谢谢!

1 个答案:

答案 0 :(得分:2)

man中,您可以选择使用map-本质上是指遍历每个结果并返回某些内容(在我们的示例中,相同的数据具有不同的构造。)

这意味着您将为每一行创建一个新对象,并将一些值放入

请注意,您确实需要另一个迭代器,因为我们希望每行一个对象。 (我们只需要以现在构造它的不同方式来映射值。)

所以解决方案可能看起来像这样:

 jq -r '.pokemon[]|{name:.name, id:.id, types:.types|map(.type.name)}' pokemon.json