Как я мог слить 2 JSON в один? мне нужно объединить их как строки? - PullRequest
0 голосов
/ 17 октября 2019

Вот мой код для объединения двух jsons в один ... Есть ли лучший способ?

Ожидаемое поведение - получить «большой json» с суммой «entry jsons» и нет«type-XX» перекрывается и сохраняет самый длинный список «rc []».

def json_src1 = '''
{
      "branch": {
                  "type-0.2": {
                      "version": "0.2",
                      "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                       }
              }
}
'''
def json_src2 = '''
{
      "branch": {
                  "type-0.3": {
                      "version": "0.3",
                      "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                      }
              }
}
'''

def concatenateJsons(json_src1, json_src2){
    def json = json_src1 + json_src2
    return json
}

Чтобы изменить строки на объекты json:

json_src1 = new JsonSlurper().parseText(json_src1)
json_src2 = new JsonSlurper().parseText(json_src2)

Для объединения

json = concatenateJsons(json_src1, json_src2)
println JsonOutput.prettyPrint(JsonOutput.toJson(json))

Ожидаемый результат:

{
"branch": {
           "type-0.2": {
           "version": "0.2",
           "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                       }

           "type-0.3": {
           "version": "0.3",
           "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                      }          
          }
}

PS Я теряю порядок элементов внутри Json после слияния без видимой причины: ("version": "0.3" перемещается на дно в type-03 {}:

Вместо:

{
"branch": {
           "type-0.2": {
           "version": "0.2",
           "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                       }

           "type-0.3": {
           "version": "0.3",
           "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                      }          
          }
}

Я получаю

{
"branch": {
           "type-0.2": {
           "version": "0.2",
           "rc": "[17, 18, 19, 20, 21, 22, 23, 24]"
                       }

           "type-0.3": {
           "rc": "[17, 18, 19, 20, 21, 22, 23, 24]",
            "version": "0.3"
                      }          
          }
}

1 Ответ

1 голос
/ 18 октября 2019

самое простое, что вы можете сделать, это изменить concatenateJsons функцию

def concatenateJsons(json_src1, json_src2){
    def json = [branch: json_src1.branch + json_src2.branch]
    return json
}

groovy, не делая глубокого слияния проанализированных jsons, он объединяет только корневые объекты.

так, чтобы слитьсодержимое веток просто суммируйте branch от каждого json

Примечание: если и json1, и json2 имеют одинаковые type-X.Y, то второе перекрывает содержимое первого.

...