0

I'm using Spring Expression Language to manipulate json due application requirements.

I have the following json response:

[
    {
        "steps": [
            {
                "id": 000,
                "sequence": 4,
                "type": "my_referente_value",
                [...]
                "route_time": {}
            },
            {
                "id": 111,
                "sequence": 5,
                "type": "any_value",
                [...]
                "route_time": {}
            }
        ]
    },
    {
        "steps": [
            {
                "id": 222,
                "sequence": 4,
                "type": "my_referente_value",
                [...]
                "route_time": {}
            },
            {
                "id": 333,
                "sequence": 5,
                "type": "any_value",
                [...]
                "route_time": {}
            }
        ]
    },
    {
        "steps": [
            {
                "id": 444,
                "sequence": 4,
                "type": "my_referente_value",
                [...]
                "route_time": {}
            },
            {
                "id": 555,
                "sequence": 5,
                "type": "any_value",
                [...]
                "route_time": {}
            }
        ]
    },
    {
        "steps": [
            {
                "id": 666,
                "sequence": 4,
                "type": "my_referente_value",
                [...]
                "route_time": {}
            },
            {
                "id": 777,
                "sequence": 5,
                "type": "any_value",
                [...]
                "route_time": {}
            }
        ]
    },
    {
        "steps": [
            {
                "id": 888,
                "sequence": 4,
                "type": "my_referente_value",
                [...]
                "route_time": {}
            },
            {
                "id": 999,
                "sequence": 5,
                "type": "any_value",
                [...]
                "route_time": {}
            }
        ]
    }
]

I tried something like parser.parseExpression("#jsonPath(#response, '$[0].steps[?(@.type == \"my_referente_value\")]')").getValue(evaluationContext) but I got only the first step. I'm trying to figure out how to not use the index $[0]

[
    {
        "steps": [
            {
                "id": 000,
                "sequence": 4,
                "type": "my_referente_value",
                [...],
                "route_time": {}
            }
        ]
    }
]

I would like to get only objects (or structure) with type == my_reference_value, as something like below:

"steps": [
    {
        "id": 000,
        "sequence": 4,
        "type": "my_referente_value",
        [...],
        "route_time": {}
    },
    {
        "id": 222,
        "sequence": 4,
        "type": "my_referente_value",
        [...,]
        "route_time": {}
    },
    {
        "id": 444,
        "sequence": 4,
        "type": "my_referente_value",
        [...],
        "route_time": {}
    },
    {
        "id": 666,
        "sequence": 4,
        "type": "my_referente_value",
        [...],
        "route_time": {}
    },
    {
        "id": 888,
        "sequence": 4,
        "type": "my_referente_value",
        [...],
        "route_time": {}
    }
]

There is any way to do that only using spring expression language? Unfortunately, I can't register methods or any variables on evaluationContext, only expressions.

Thanks for any help or idea.

Gary Russell
  • 166,535
  • 14
  • 146
  • 179
Paulo Eduardo
  • 43
  • 2
  • 9

0 Answers0