Как выборочно достать поля из JSon

90
21 апреля 2021, 22:50

У меня есть Json:

"values": [
        {
            "user": {
                "name": "Name1",
                "emailAddress": "email1",
                "id": 1983775,
                "displayName": "name1",
                "active": true,
                "slug": "ext.nnn1",
                "type": "NORMAL",
                "links": {
                    "self": [
                        {
                            "href": "https://stash.vpn.ru/users/ext.nnn"
                        }
                    ]
                }
            },
            "role": "REVIEWER",
            "approved": false,
            "status": "UNAPPROVED"
        },
        {
            "user": {
                "name": "Name2",
                "emailAddress": "email2",
                "id": 1983775,
                "displayName": "name2",
                "active": true,
                "slug": "ext.nnn2",
                "type": "NORMAL",
                "links": {
                    "self": [
                        {
                            "href": "https://stash.vpn.ru/users/ext.nnn"
                        }
                    ]
                }
            },
            "role": "REVIEWER",
            "approved": true,
            "status": "APPROVED"
        }
]

Как из этих двух(на деле их может быть и десяток) элементов массива достать поле name, где: "role": "REVIEWER", "status": "APPROVED".

Что я делаю: 1. Получаю кол-во элементов в массиве и прохожусь по ним 2. Пытаюсь достать эти самые элементы

       Integer members = JsonPath.read(result, "$.values.length()");
       for (int i = 0; i < members; i++) {
           memberApprove.add(members, JsonPath.read(result.getBody(), "$.values[" + members + "].(@.role=REVIEWER & @.status=APPROVED)"));
       }

выкидывает ошибку: Method threw 'com.jayway.jsonpath.PathNotFoundException' exception.

Answer 1

Пока решил проходиться циклом по полям и сверять

        Integer members = JsonPath.read(result.getBody(), "$.values.length()");
        // ToDO
        for (int i = 0; i < members; i++) {
            if (JsonPath.read(result.getBody(), "$.values[" + i + "].role").equals("REVIEWER")
                    && JsonPath.read(result.getBody(), "$.values[" + i + "].approved").toString().equals("true")) {
                memberApprove.add(JsonPath.read(result.getBody(), "$.values[" + i + "].user.name"));
            }
        }
READ ALSO
Программное нажатие на элементы Webview

Программное нажатие на элементы Webview

Тренируюсь в создании парсера, работающего в приложении android и умеющего взаимодействовать с разбираемым сайтомНе могу понять как сделать...

116
Пытаюсь внедрять сценарии Ruby в spring

Пытаюсь внедрять сценарии Ruby в spring

Пытаюсь внедрять сценарии Ruby в spring из книги springinaction,бросает исключение в xml файле, наверное как-то не так сделал расположение файлов или еще...

143
Не запускается .jar файл с JavaFX

Не запускается .jar файл с JavaFX

В Eclipse все компилируется, а вот когда я запаковалjar файл, он вообще не открывается

119
Как установить зависимость в Intelij Idea?

Как установить зависимость в Intelij Idea?

Как в модуле установить зависимость от comintellij:annotations:12

126