Фильтр Groovy Map - PullRequest
       6

Фильтр Groovy Map

0 голосов
/ 11 января 2019

В Groovy я пытаюсь отфильтровать карту, по которой я специально хочу проверить, является ли любое вхождение cars.models.colors пустым. Если это так, я хочу удалить этот конкретный элемент.

Например, я ожидаю удалить:

{
   "name": "m5",
   "colors": []
}

Код:

#!/usr/local/bin/groovy
import groovy.json.*
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText '''
{
    "cars": [{
            "name": "ford",
            "models": [{
                "name": "fiesta",
                "colors": [
                    { "colorName": "grey", "colorId": "123" },
                    { "colorName": "white", "colorId": "844" },
                    { "colorName": "green", "colorId": "901" }
                ]
            }]
        }, {
            "name": "vw",
            "models": [{
                "name": "golf",
                "colors": [{ "colorName": "black", "colorId": "392" }]
            }]
        }, {
            "name": "bmw",
            "models": [{
                "name": "m5",
                "colors": []
            }]
        }
    ]
}
'''

Map filtered = [:]
filtered['root'] = object.cars.models.colors.findAll {it.value.isEmpty()}

println JsonOutput.prettyPrint(JsonOutput.toJson(filtered))

Как только фильтрация будет успешно применена, я ожидаю, что JSON будет выглядеть, например,

{
    "cars": [{
            "name": "ford",
            "models": [{
                "name": "fiesta",
                "colors": [{
                        "colorName": "grey",
                        "colorId": "123"
                    },
                    {
                        "colorName": "white",
                        "colorId": "844"
                    },
                    {
                        "colorName": "green",
                        "colorId": "901"
                    }
                ]
            }]
        },
        {
            "name": "vw",
            "models": [{
                "name": "golf",
                "colors": [{
                    "colorName": "black",
                    "colorId": "392"
                }]
            }]
        },
        {
            "name": "bmw",
            "models": []
        }
    ]
}

Однако мой код в настоящее время просто возвращает:

{
    "root": [
        [

        ]
    ]
}

1 Ответ

0 голосов
/ 11 января 2019

Поскольку вы загрузили JSON, это уже «копия» оригинала, вы можете просто работать с загруженным object (напрямую манипулировать им).

Таким образом, вы можете повторять автомобили и отфильтровывать все модели без цвета. Э.Г.

import groovy.json.*
def object = new JsonSlurper().parseText('''
{
    "cars": [{
        "name": "ford",
        "models": [{
            "name": "fiesta",
            "colors": [
                { "colorName": "grey", "colorId": "123" },
                { "colorName": "white", "colorId": "844" },
                { "colorName": "green", "colorId": "901" }
            ]
        }]
    }, {
        "name": "bmw",
        "models": [{"name": "m5","colors": []}]
    }]
}
''')

object.cars.each{
    it.models = it.models.findAll{ it.colors }
}

println JsonOutput.prettyPrint(JsonOutput.toJson(object))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...