如何从 JSON 中获取特定的数组节点并使用 groovy 逐一打印?

How to get the particular array node from JSON and print one by one using groovy?

我有以下 JSON 格式:-

{
"id": "102",
"brand": "Disha",
"book": [{
    "slr": "EFTR",
    "description": "Grammer",
    "data": "TYR",
    "rate": true,
    "numberOfPages": 345,
    "maxAllowed": "12",
    "currentPage": 345
    },
    {
    "slr": "EFRE",
    "description": "English",
    "data": "TYR",
    "rate": true,
    "numberOfPages": 345,
    "maxAllowed": "12",
    "currentPage": 345
    },
    {
    "slr": "BGTR",
    "description": "French",
    "data": "TYR",
    "rate": true,
    "numberOfPages": 345,
    "maxAllowed": "12",
    "currentPage": 345
    }]
}

我想编写 groovy 代码来获取书籍数组并一张一张打印,在此之前我还需要计算书籍的数组节点。

我试过下面的代码:-

def response = context.expand( '${book#Response}' );
def slurper = new JsonSlurper();
String inputJSON = slurper.parseText(response)
def strFinalValueToRead = "$." + "book[0]"
def strActualValue = parse(inputJSON).read(strFinalValueToRead).toString()

log.info strActualValue

我收到错误

com.jayway.jsonpath.InvalidJsonException: net.minidev.json.parser.ParseException: Unexpected End Of File.

如有任何帮助,我们将不胜感激。

千辛万苦终于来了。我得到了解决方案并尝试使用 Map 和 List。

Object inputJSON = slurper.parseText(response)

def countBook = inputJSON.book.size()

for(int i=0; i<countBook; i++) {
Map result = (Map) inputJSON
List bookNode = result.get("book")
log.info bookNode[i]    

}

您可以对相同的 REST 请求测试步骤使用 Script Assertion,这可以避免另一个额外的 groovy 步骤。

脚本断言

assert context.response, 'Response is empty or null'

def json = new groovy.json.JsonSlurper().parseText(context.response)
log.info json.book

上面记录了所有书籍的详细信息。

您也可以使用索引来显示特定书籍的详细信息,例如在 0 索引处显示书籍。

log.info json.book[0]

它也是根据一些过滤器找到某本书。例如,查找 descriptionGrammer 的书。

log.info json.book.find {it.description == 'Grammer'}
Map m = new groovy.json.JsonSlurper().parseText(json)
m.book.each{println it}

这就够了。