0

我正在尝试创建一个函数,在该函数中我传递一个 json 对象JsonSlurper和一个包含位于原始位置的 json 对象的字符串。如果是,则在满足元素计数条件时返回 true 或 false。例如:

我的儿子:

{
  "Errors": [],
  "Loans": [
    {
      "Applications": [
        {
          "id": 1,
          "name": "test"
        }
      ]
    },
    {
      "Applications": [
        {
          "id": 2,
          "name": "test3"
        },
        {
          "id": 3,
          "name": "test3"
        }
      ]
    }
  ]
}

我的方法将得到 json 数组,如下所示:

def myJson = new JsonSlurper().parseText(receivedResponse.responseBodyContent)
def result = verifyElementsCountGreaterThanEqualTo(myJson, "Loans[0].Applications[1]", 3)

有没有这样的图书馆可以为我做到这一点?

我试图myJson["Loans[0].Applications[1]"]获取 Json 对象,以便获取大小,但结果是null.

4

3 回答 3

2

下面的呢?我猜这是微不足道的。

Loans是一个列表,您可以在其中获得多个Applications. 只需传递应用程序的索引。

def json = new groovy.json.JsonSlurper().parseText(jsonString)
//Closure to get the particular Loan
def getLoanAt = { json.Loans[it]}
//Call above closure as method to print the 2nd Applications
​println getLoanAt(1)​

如果您想打印所有贷款申请,这里您根本不需要关闭:

json.Loans.each {println it}​

这里是在线demo快速测试。

如果您想按 ID 申请贷款,请使用以下内容:

//To get all loan application by Id
def getApplicationById = {id -> json.Loans.Applications.flatten().find{id == it.id}}
println getApplicationById(3)

以上快速demo

于 2018-08-29T01:38:53.283 回答
1

您可以尝试将您的 json 转换为 java 对象Map以准确,之后您可以获得Loansas an object ArrayList

def myJson = new JsonSlurper().parseText("{\"Errors\": [], \"Loans\": [{\"id\": 1}, {\"id\": 2}]}");
def loansList = myJson.Loans// ArrayList
于 2018-08-28T20:21:20.800 回答
0

After a lot of searching, I was able to find a solution with the rest assured api.

I'm able to use a string for the path I'm looking for in the Json object as follows:

import io.restassured.path.json.JsonPath as JsonPath

def myJson = "{'Errors':[],'Loans':[{'Applications':[{'id':1,'name':'test'}]},{'Applications':[{'id':2,'name':'test3'},{'id':3,'name':'test3'}]}]}"    
def applicationData = JsonPath.with(myJson).get("Loans[0].Applications[1]")
def applicationsListData = JsonPath.with(myJson).get("Loans[0].Applications")
于 2018-08-29T04:07:08.293 回答