-1

Considering the following deeply nested 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"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

I need to filter by "level3value22" at .[0].children[].children[].level3key2 and flatten this deeply nested json object into an array. The expected result is the following. How should the jq sentence look like?

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

Thanks in advance!

0stone0
  • 34,288
  • 4
  • 39
  • 64

1 Answers1

0

I'm not sure if I understood correctly what you were trying to achieve but this at least works on your sample data:

[
  .[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

pmf
  • 24,478
  • 2
  • 22
  • 31