Groovy получить объект в json slurper объект со строкой
Я пытаюсь создать функцию, в которой я передаю объект 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 ответа
Как насчет следующего? И это тривиально, я думаю.
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)
Быстрое демо из вышеперечисленного.
Вы можете попробовать конвертировать ваш JSON в Java-объект Map
чтобы быть точным, после этого вы можете получить Loans
как объект ArrayList
,
def myJson = new JsonSlurper().parseText("{\"Errors\": [], \"Loans\": [{\"id\": 1}, {\"id\": 2}]}");
def loansList = myJson.Loans// ArrayList
После долгих поисков мне удалось найти решение с оставшимися гарантированными 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")