如何从 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]
它也是根据一些过滤器找到某本书。例如,查找 description
为 Grammer
的书。
log.info json.book.find {it.description == 'Grammer'}
Map m = new groovy.json.JsonSlurper().parseText(json)
m.book.each{println it}
这就够了。
我有以下 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]
它也是根据一些过滤器找到某本书。例如,查找 description
为 Grammer
的书。
log.info json.book.find {it.description == 'Grammer'}
Map m = new groovy.json.JsonSlurper().parseText(json)
m.book.each{println it}
这就够了。