gjson icon indicating copy to clipboard operation
gjson copied to clipboard

how to get all matching fields, the path is uncertain

Open litao09h opened this issue 2 years ago • 2 comments

Example:

{
    "k1": {
        "text": "m1",
        "v": 1
    },
    "k2": {
        "child": {
            "text": "n2",
            "v": 1
        }
    },
    "k3": {
        "v": 1
    }
}

example in jsonPath: express: $..text output: ["m1","n2"]

litao09h avatar Mar 01 '23 03:03 litao09h

@litao09h, were you ever able to figure this out? I'm looking to do the same thing

liveFreeOrCode avatar Aug 02 '23 19:08 liveFreeOrCode

@litao09h @liveFreeOrCode As far as I know it's not possible to do it for the generic case of arbitrary depths. But if you know in advance the possible depths where the field is present though then it becomes doable with a bit of a verbose query. For example for the specific case above with depth 1 and 2 a query of the form:

[@values.#.text,@values.#.@values.#.text].@flatten:{"deep":true}

gives you:

["m1","n2"]

The [] around is a multipaths to create a new object, and the @flatten is needed to remove all the empty lists for the part of the query for depth two.

volans- avatar Aug 02 '23 20:08 volans-