Конвертировать JSON в Gpath результат - PullRequest
0 голосов
/ 08 сентября 2018

Я хочу преобразовать все значения ключей JSON на карте. Где мне нужен ключ как результат gpath и значение как значение ключа объекта.

Ввод Json

 {
    "employees": {
        "employee": [{
                "id": "1",
                "firstName": "Tom",
                "lastName": "Cruise",
                "photo": "https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg"
            },
            {
                "id": "2",
                "firstName": "Maria",
                "lastName": "Sharapova",
                "photo": "https://pbs.twimg.com/profile_images/3424509849/bfa1b9121afc39d1dcdb53cfc423bf12.jpeg"
            },
            {
                "id": "3",
                "firstName": "James",
                "lastName": "Bond",
                "photo": "https://pbs.twimg.com/profile_images/664886718559076352/M00cOLrh.jpg"
            }
        ]
    }
 }

Вывод, который я ожидаю,

[employees.employee[0].id:"1",
employees.employee[0].firstName:"tom",
....]

Я пробовал класс объекта Groovy jsonSurper (), но не могу найти решение для сопоставления всех ключей в gpath.

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 08 сентября 2018

Немного странного запроса ... Не могу понять, почему вы хотите это сделать ... но в любом случае вам нужно написать некоторую логику для рекурсии по карте, сгенерированной JsonSlurper, и свернуть ключи ...

Предполагается, что указанный выше json находится в строковой переменной json:

def map = new JsonSlurper().parseText(json)

def collapseKey(String prefix, Map result, value) {
    if (value instanceof Map) {
        value.each { k, v ->
            collapseKey("${prefix ? "${prefix}." : ''}$k", result, v)
        }
    } else if (value instanceof List) {
        value.eachWithIndex{ e, idx ->
            collapseKey("${prefix}[$idx]", result, e)
        }
    } else {
        result."$prefix" = value
    }
    result
}

def result = collapseKey("", [:], map)

Вы можете (конечно) просто разобрать его на карту и сделать:

map.employees.employee[0].firstName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...