плохо знакомы с Groovy и кодирования в целом. Попытка сделать следующее: (Я просмотрел много предыдущих вопросов и ответов в stackoverflow, но ни одно из найденных решений, похоже, не работает)
У меня есть следующий JSON, из которого мне нужно получить список / строку с именами поставщиков, т.е. вывод должен выглядеть примерно так: «поставщик 1, поставщик 2, поставщик 3»
[
{
"id":217564,
"created-at":"2020-01-22T08:59:57+00:00",
"state":"submitted",
"supplier":
{
"name":"supplier 1"
}
},
{
"id":217565,
"created-at":"2020-01-22T09:00:00+00:00",
"state":"submitted",
"supplier":
{
"name":"supplier 2"
}
},
{
"id":217566,
"created-at":"2020-01-22T09:00:48+00:00",
"state":"submitted",
"supplier":
{
"name":"supplier 3"
}
}
]
Я использовал следующий Groovy скрипт, чтобы распечатать все имена поставщиков в списке:
import groovy.json.*;
@CustomScriptAction(
input = ['json_response'],
output = 'suppliers'
)
def CustomScriptAction14()
{
def object = new JsonSlurper().parseText(json_response.toString())
def suppliers = "No suppliers"
if(object != null && !object.isEmpty())
{
for(def i =0; i<object.size();i++)
{
suppliers = RString.of(object[i].'supplier'.name.toString());
}
}
return suppliers
}
Я получил вывод: «поставщик 3»
Проблема в том, что этот скрипт дает мне только последнего поставщика в цикле, а не выполняет итерацию по всему циклу и распечатывает всех поставщиков. Поэтому я попробовал другой скрипт:
import groovy.json.*;
@CustomScriptAction(
input = ['json_response'],
output = 'suppliers'
)
def CustomScriptAction14()
{
def object = new JsonSlurper().parseText(json_response)
def suppliers = object.findAll { it.value instanceof List }
.values()
.flatten()
.collect { [it.'supplier'.'name'] }
}
return suppliers
Но с этим я получаю пустой ответ.
Что я делаю неправильно?
Всего 1 ответ
Ну, это закончилось работать:
import groovy.json.*;
@CustomScriptAction(
input = ['json_response'],
output = 'suppliers'
)
def customScript()
{
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(json_response.toString())
suppliers = RString.of(object.'supplier'.'name'.toString())
}