Как проанализировать ответ Json и обрезать дочерние узлы

Это ответ JSON, который я пытаюсь проанализировать:

{
"data": {
    "Content": {
        "id": 26,
        "name": "Dashboard1"
    },
    "List": [
        {
            "ListContent": {
                "id": 178,
                "name": "Card-144"
            },
            "cards": [
                {
                    "id": 1780,
                    "configuration": {
                        "id": 7178,
                        "name": "Emp"
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 179,
                "name": "Card-14"
            },
            "cards": [
                {
                    "id": 1798,
                    "configuration": {
                        "id": 1789,
                        "name": "RandomColumns"
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 180,
                "name": "Card-1"
            },
            "cards": [
                {
                    "id": 18080,
                    "configuration": {
                        "id": 1080,
                        "allow": true
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 181,
                "name": "Card-14"
            },
            "cards": [
                {
                    "id": 18081,
                    "configuration": {
                        "id": 1881,
                        "name": "Functions"
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 182,
                "name": "Card-1443"
            },
            "cards": [
                {
                    "id": 1782,
                    "configuration": {
                        "id": 1802,
                        "name": "Emp-O"
                    }
                }
            ]
        }
    ]
}

}

Из Json мне нужно извлечь "id" под узлами "ListContent" и сохранить его в массиве. Также нужно будет игнорировать "id" под дочерними узлами. Вот отличный сценарий, с которым я пытаюсь добиться этого,

    def CList = ""
    import groovy.json.JsonSlurper
    def jsonRespData = context.expand( '${TestStep#Response#$.data.List}' ) 
    def outputResp = new JsonSlurper().parseText(jsonRespData)


    outputResp.id.each()
    {log.info( ":"+ it) 
    CList=CList.concat(it.toString()).concat(',')} 


      log.info (CList)

Итак, массив, который я ожидаю, это CList [178,179,180,181,182], но в настоящее время я получаю нулевое значение. Какой должен быть правильный groovy, чтобы только читать "id" из "ListContent" и записывать его в массив? Любая помощь могла бы быть полезна. Заранее спасибо.

2 ответа

Решение

Вы можете просто использовать (неявный) оператор распространения следующим образом:

def json = new groovy.json.JsonSlurper().parse('/tmp/x.json' as File)

// 
def i = json.data.List.ListContent.id
assert i == [178, 179, 180, 181, 182]

// with explicit spread operator
def e = json.data.List*.ListContent*.id
assert e == [178, 179, 180, 181, 182]
def str = '''
{
"data": {
    "Content": {
        "id": 26,
        "name": "Dashboard1"
    },
    "List": [
        {
            "ListContent": {
                "id": 178,
                "name": "Card-144"
            },
            "cards": [
                {
                    "id": 1780,
                    "configuration": {
                        "id": 7178,
                        "name": "Emp"
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 179,
                "name": "Card-14"
            },
            "cards": [
                {
                    "id": 1798,
                    "configuration": {
                        "id": 1789,
                        "name": "RandomColumns"
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 180,
                "name": "Card-1"
            },
            "cards": [
                {
                    "id": 18080,
                    "configuration": {
                        "id": 1080,
                        "allow": true
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 181,
                "name": "Card-14"
            },
            "cards": [
                {
                    "id": 18081,
                    "configuration": {
                        "id": 1881,
                        "name": "Functions"
                    }
                }
            ]
        },
        {
            "ListContent": {
                "id": 182,
                "name": "Card-1443"
            },
            "cards": [
                {
                    "id": 1782,
                    "configuration": {
                        "id": 1802,
                        "name": "Emp-O"
                    }
                }
            ]
        }
    ]
}
}
'''

def outputResp = new groovy.json.JsonSlurper().parseText(str)
outputResp.data.List.collect { it.ListContent.id }

Как у вас уже есть List от (context.expand( '${TestStep#Response#$.data.List}' )), вы можете просто сделать:

outputResp.collect { it.ListContent.id }

Выше возвращает ArrayList,

Другие вопросы по тегам