Groovy получить объект в json slurper объект со строкой - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать функцию, в которой я передаю объект json из JsonSlurper и строку, которая содержит объект json, расположенный в оригинале. Если это так, он возвращает истину или ложь, если выполняется условие количества элементов. Например:

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 голосов
/ 29 августа 2018

Как насчет следующего? И это тривиально, я думаю.

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}​

Здесь онлайн демо для быстрого теста.

В случае, если вы хотите оформить заявку на кредит по Id, используйте ниже:

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

Быстрый демо из вышеперечисленного.

0 голосов
/ 29 августа 2018

После долгих поисков я смог найти решение с уверенностью 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")
0 голосов
/ 28 августа 2018

Вы можете попытаться преобразовать свой JSON в Java-объект Map, чтобы быть точным, после этого вы можете получить Loans в качестве объекта ArrayList.

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