Как применить левое соединение к двум объектам JSON в скрипте groovy - PullRequest
0 голосов
/ 29 мая 2019

У меня есть два файла JSON:

first.json

[
{"a":"1", "b": "tmp"},
{"a":"2", "b": "tmp"},
{"a":"3", "b": "tmp"}
]

second.json

[
{"c":"1", "d": "tmp"},
{"c":"2", "d": "tmp"},
{"c":"4", "d": "tmp"}
]

output.json

[
{"a":"1", "b": "tmp", "c": "1" , "d": "tmp"},
{"a":"2", "b": "tmp", "c": "2" , "d": "tmp"},
{"a":"3", "b": "tmp", "c": "" , "d": ""}
]

Я хочу применить левое соединение к двум json-файлам first.json и second.json на основе двух полей - «a» of first.json и «c» second.json, чтобы получить выходные данные как output.json. Как я могу добиться того же, используя Groovy Script?

ПРИМЕЧАНИЕ: я хотел бы добиться этого в одну строку, если это возможно.

1 Ответ

1 голос
/ 29 мая 2019

Вам нужно будет сделать что-то вроде этого:

def firstJson = '''[
    {"a":"1", "b": "tmp"},
    {"a":"2", "b": "tmp"},
    {"a":"3", "b": "tmp"}
]'''

def secondJson = '''[
    {"c":"1", "d": "tmp"},
    {"c":"2", "d": "tmp"},
    {"c":"4", "d": "tmp"}
]'''

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def slurpy = new JsonSlurper()

def first = slurpy.parseText(firstJson)
def second = slurpy.parseText(secondJson)

def result = first.collect { f ->
    f + (second.find { it.c == f.a } ?: second[0].keySet().collectEntries { [it, ''] })
}

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