Разбор JSON с использованием Groovy, где массив и несколько объектов не имеют имени для получения списка - PullRequest
0 голосов
/ 12 февраля 2020

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

Проблема в том, что этот скрипт дает мне только последнего поставщика в l oop вместо того, чтобы итерировать весь l oop и распечатка всех поставщиков. Поэтому я попробовал другой сценарий:

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 Ответ

0 голосов
/ 12 февраля 2020

Ну, это сработало:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...