繁体   English   中英

jq 展平一个深度嵌套的 json 文档

[英]jq flatten a deeply nested json document

考虑以下深度嵌套的 json object

[
    {
        "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 level3key2 处按“level3value22”进行过滤,并将这个深度嵌套的 json object 展平为一个数组。 预期结果如下。 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"
    }
]

提前致谢!

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

[
  .[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"
  }
]

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM