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

如何从JSON中获取特定的数组节点并使用groovy逐个打印?,json,rest,groovy,soapui,ready-api,Json,Rest,Groovy,Soapui,Ready Api,我有以下JSON格式:- { "id": "102", "brand": "Disha", "book": [{ "slr": "EFTR", "description": "Grammer", "data": "TYR", "rate": true, "numberOfPages": 345, "maxAllowed": "12", "currentPage": 345 }, { "slr": "EFRE",

我有以下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:文件意外结束


任何帮助都将不胜感激。

最后,经过这么多的努力。我得到了解决方案,并尝试了地图和列表

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]    

}
Object inputJSON=slurper.parseText(响应)
def countBook=inputJSON.book.size()

对于(inti=0;i您可以对相同的REST请求测试步骤使用
脚本断言
,这可以避免另一个额外的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]
它还可以根据一些过滤器查找特定的书籍。例如,查找
描述
语法
的书籍

log.info json.book.find {it.description == 'Grammer'}

这就足够了。

代码在我的计算机中使用您提供的json工作。我不知道,可能是我丢失了一些json的外部jar文件。但我无法复制它。@Ashuans,看看我的解决方案是否有用?在这里,我不确定我将得到的响应。book的节点数或book数组中的元素数将我可能不一样。所以,在这种情况下,上面的部分可能不起作用。@raw上面的哪部分不起作用?只是展示了一种记录第0个索引的方法。为了显示所有的书籍,您不需要编写for循环。只需看脚本断言。哦,我的意思是,如果我有一个具有未定义次数的书籍数组,它将是动态的。我想要所有的要打印出来。是的,<代码> Log.In JSON。书是这样的。在上面的方法中使用了比“代码>脚本断言< /代码>少一个以上的测试步骤。感谢有帮助的答案的赞成票;如果你认为最好的答案,考虑接受。
Map m = new groovy.json.JsonSlurper().parseText(json)
m.book.each{println it}