Разбор JSON с использованием Groovy, где массив и несколько объектов не имеют имени для получения списка

плохо знакомы с 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())

}

Есть идеи?

10000