遍历数组并获取多个值

时间:2020-07-10 22:10:10

标签: json iteration jq

我有一个具有以下结构的json文件:

{
    "category": 
    {
        "subcategory": 
            [
                {
                    "id": "1", 
                    "val": "blue",
                    "foo": "blahblah", 
                    "bar": "blahblah"

                },
                {   
                    "id": "2", 
                    "val": "red"
                    "foo": "blahblah", 
                    "bar": "blahblah"
                }
            ]
    }
}

我想将其转换为:

{   
    subcategories
    [
        {"id": "1","val": "blue"}
        {"id": "2","val": "red"}
    ]

}

我能得到的最接近的是

cat input.json | jq -c '.[] | \
    {id: .category.subcategory[].id, \
    value: .category.subcategory[].val}' \
    > output.json

它不起作用,但是很接近:

  1. 我没有 subcategories节点。
  2. id始终是第一个值-IOW 1

任何帮助都会很棒!

谢谢!

1 个答案:

答案 0 :(得分:0)

您的输入已经具有所需的数组,因此您的jq程序可以很简单:

{subcategories: .category.subcategory }

或者,如果您只想保留“ id”和“ val”键:

{subcategories: .category.subcategory | map({id,val}) }

如果(和/或何时)选择使用迭代,请确保没有太多的迭代器。