【问题标题】:Iterating over a array and getting multiple values遍历数组并获取多个值
【发布时间】:2020-10-31 16:58:39
【问题描述】:

我有一个结构如下的 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

任何帮助都会很棒!

谢谢!!!

【问题讨论】:

    标签: json iteration jq


    【解决方案1】:

    你的输入已经有了你想要的数组,所以你的 jq 程序可以很简单:

    {subcategories: .category.subcategory }
    

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

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

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

    【讨论】:

    • 子类别中还有一些其他字段,我没有包括在示例中。我不想在输出中。除了id 和value,还有一些我不想要的字段。我想我可以从 output.json 中删除它。但是有没有办法过滤掉这些?
    • 是的。我建议您更新您的问题,以便要求更清晰。
    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 2011-04-14
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多