【问题标题】:jq flatten a deeply nested json documentjq 展平深度嵌套的 json 文档
【发布时间】:2022-01-13 05:54:05
【问题描述】:

考虑以下深度嵌套的json对象

[
    {
        "level1key": "level1value",
        "children": [
            {
                "level2key": "level2value1",
                "children": [
                    {
                        "level3key1": "ignored",
                        "level3key2": "ignored",
                        "level3key3": [
                            {
                                "level4key": "ignored"
                            }
                        ]
                    },
                    {
                        "level3key1": "level3value1",
                        "level3key2": "level3value22",
                        "level3key3": [
                            {
                                "level4key": "level4value1"
                            }
                        ]
                    },
                    {
                        "level3key1": "level3value2",
                        "level3key2": "level3value22",
                        "level3key3": [
                            {
                                "level4key": "level4value2"
                            }
                        ]
                    }
                ]
            },
            {
                "level2key": "level2value2",
                "children": [
                    {
                        "level3key1": "ignored",
                        "level3key2": "ignored",
                        "level3key3": [
                            {
                                "level4key": "ignored"
                            }
                        ]
                    },
                    {
                        "level3key1": "level3value3",
                        "level3key2": "level3value22",
                        "level3key3": [
                            {
                                "level4key": "level4value3"
                            }
                        ]
                    },
                    {
                        "level3key1": "level3value4",
                        "level3key2": "level3value22",
                        "level3key3": [
                            {
                                "level4key": "level4value4"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

我需要通过.[0].children[].children[].level3key2 的“level3value22”进行过滤,并将这个深度嵌套的 json 对象展平为一个数组。预期结果如下。 jq句子应该怎么写?

[
    {
        "v1": "level1value",
        "v2": "level2value1",
        "v3": "level3value1",
        "v4": "level4value1"
    },
    {
        "v1": "level1value",
        "v2": "level2value1",
        "v3": "level3value2",
        "v4": "level4value2"
    },
    {
        "v1": "level1value",
        "v2": "level2value2",
        "v3": "level3value3",
        "v4": "level4value3"
    },
    {
        "v1": "level1value",
        "v2": "level2value2",
        "v3": "level3value4",
        "v4": "level4value4"
    }
]

提前致谢!

【问题讨论】:

    标签: json jq flatten


    【解决方案1】:

    我不确定我是否正确理解了您想要实现的目标,但这至少适用于您的示例数据:

    [
      .[0] | [.level1key] + (
        .children[] | [.level2key] + (
          .children[] | select(.level3key2 == "level3value22") | [.level3key1] + (
            .level3key3[] | [.level4key]
          )
        )
      )
      | with_entries(.key |= "v\(. + 1)")
    ]
    
    [
      {
        "v1": "level1value",
        "v2": "level2value1",
        "v3": "level3value1",
        "v4": "level4value1"
      },
      {
        "v1": "level1value",
        "v2": "level2value1",
        "v3": "level3value2",
        "v4": "level4value2"
      },
      {
        "v1": "level1value",
        "v2": "level2value2",
        "v3": "level3value3",
        "v4": "level4value3"
      },
      {
        "v1": "level1value",
        "v2": "level2value2",
        "v3": "level3value4",
        "v4": "level4value4"
      }
    ]
    

    Demo

    【讨论】:

    • 太棒了!这正是我正在寻找的。​​span>
    猜你喜欢
    • 2016-09-29
    • 2021-12-20
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多