3

我有以下 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 代码来获取 book 数组并一一打印,在此之前我还需要计算 book 的数组节点。

我试过下面的代码: -

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:文件意外结束。

任何帮助,将不胜感激。

4

3 回答 3

1

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

脚本断言

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'}
于 2017-12-29T07:41:34.257 回答
1
Map m = new groovy.json.JsonSlurper().parseText(json)
m.book.each{println it}

这就够了。

于 2017-12-29T10:24:57.280 回答
0

终于,经过这么多努力。我得到了解决方案并使用 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]    

}
于 2017-12-29T07:31:21.250 回答