Groovy用字符串在json slurper对象中获取对象

时间:2018-08-28 19:51:19

标签: java json groovy katalon-studio jsonslurper

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

myJson:

{
  "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

3 个答案:

答案 0 :(得分:1)

以下内容如何?我猜这很简单。

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

答案 1 :(得分:0)

您可以尝试将json准确地转换为Java对象Map,之后可以将Loans作为对象ArrayList

def myJson = new JsonSlurper().parseText("{\"Errors\": [], \"Loans\": [{\"id\": 1}, {\"id\": 2}]}");
def loansList = myJson.Loans// ArrayList

答案 2 :(得分:0)

经过大量搜索,我终于找到了一个放心的api解决方案。

我可以使用string作为我在Json对象中寻找的路径,如下所示:

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")