Как JSON вложенные ключи, используя groovy - PullRequest
0 голосов
/ 23 сентября 2019

У меня ниже код для создания JSON.

import groovy.json.*;

def input='{\"env\": {\"a\": 1,\"b\": 2,\"c\": 3,\"d\": 4}}';
def jsonSlurper = new JsonSlurper();
def inputJson= jsonSlurper.parseText(input);

def mapping = jsonSlurper.parseText("{}");


def NO2 = jsonSlurper.parseText("{}");
def CO2 = jsonSlurper.parseText("{}");
def SO2 = jsonSlurper.parseText("{}");
def CO = jsonSlurper.parseText("{}");

NO2["NO2"] = inputJson.env.c
mapping["ENVIRONMENT"] = NO2
CO2["CO2"] = inputJson.env.a
mapping["ENVIRONMENT"] = CO2
SO2["SO2"] = inputJson.env.d
mapping["ENVIRONMENT"] = SO2
CO["CO"] = inputJson.env.b
mapping["ENVIRONMENT"] = CO


def finalJson = new JsonBuilder(mapping).toPrettyString();

println finalJson

В приведенном выше коде это создает JSON, как это:

{
    "ENVIRONMENT": {
        "CO": 2
    }
}

Но я не понимаю, почему он пропустил CO2, NO2 и SO2.

Требуемый вывод:

{
    "ENVIRONMENT": {
        "CO2": 1,
        "CO":2,
        "NO2":3,
        "SO2":4
    }
}

Есть ли способ, используя этот метод, я получаю этот JSON.

Спасибо:)

1 Ответ

0 голосов
/ 23 сентября 2019

В Java карта может иметь только уникальные ключи.Обычно побеждает последняя put операция.

...
mapping["ENVIRONMENT"] = SO2
mapping["ENVIRONMENT"] = NO2

Кроме того, ваш код ужасен .. действительно, лишний.

Способ выполнения ваших действий:

import groovy.json.*

def input='{"env": {"a": 1,"b": 2,"c": 3,"d": 4}}' // no need to escape " in single-quoted litterals

def env = new JsonSlurper().parseText( input ).env

Map out = [ ENVIRONMENT:[
  NO2:env.c,
  CO2:env.a,
  SO2:env.d,
  CO:env.b,
] ]

String finalJson = JsonOutput.toJson out 

assert '{"ENVIRONMENT":{"NO2":3,"CO2":1,"SO2":4,"CO":2}}' == finalJson
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...