Bikash Kumar
Bikash Kumar

Reputation: 35

How to customize a json that is created using Gson object in java

I have this JSON object that I've created using GSON:

{
"data": {
  "isDeleted": false,
  "period": 201601,
  "columnMap": {
    "1c49eb80-7b53-11e6-bc4b-afbeabb62718": "5000",
    "1c49eb80-7b52-11e6-bc4b-afbeabb62718": "hello",
    "03a534c0-a7f1-11e6-9cde-493bf5c47f4": "AUS",
    "03a534c0-a7fa-11e6-9cde-493bf5c47f4": "123"
    }
  }
}

But my requirement is for it to look like

{ 
"data": {
  "isDeleted": false,
  "period": 201601,
    "1c49eb80-7b53-11e6-bc4b-afbeabb62718": "5000",
    "1c49eb80-7b52-11e6-bc4b-afbeabb62718": "hello",
    "03a534c0-a7f1-11e6-9cde-493bf5c47f4": "AUS",
    "03a534c0-a7fa-11e6-9cde-493bf5c47f4": "123"
    }
  }
}

How do I solve this, because all the values in "columnMap" are generated dynamically.

Upvotes: 1

Views: 151

Answers (1)

atiqkhaled
atiqkhaled

Reputation: 386

You need to create instance updateJsonObj of JsonObject to update key and value of columnMap using for each loop. Following code snippet is the solution :

String json = "{ \"data\": {\"isDeleted\": false,\"period\": 201601,"
            + "\"columnMap\": {\"1c49eb80-7b53-11e6-bc4b-afbeabb62718\": \"5000\","
            + "\"1c49eb80-7b52-11e6-bc4b-afbeabb62718\": \"hello\","
            + "\"03a534c0-a7f1-11e6-9cde-493bf5c47f4\": \"AUS\", "
            + "\"03a534c0-a7fa-11e6-9cde-493bf5c47f4\": \"123\"}}}";

    Gson gson = new Gson();
    JsonObject root = new JsonParser().parse(json).getAsJsonObject();
    JsonElement dataElement = root.get("data");
    // cobj has value of colummMap of json data
    JsonObject cobj = (JsonObject) root.get("data").getAsJsonObject().get("columnMap");
    JsonObject updateJsonObj = root;
    // remove columnMap node as you wanted !
    updateJsonObj.get("data").getAsJsonObject().remove("columnMap");

    for (Entry<String, JsonElement> e : cobj.entrySet()) {
         //update updateJsonObj root node with key and value of columnMap
         updateJsonObj.get("data").getAsJsonObject().addProperty(e.getKey(), e.getValue().getAsString());
    }

    String updateJson = gson.toJson(updateJsonObj);
    System.out.println(updateJson);

Upvotes: 1

Related Questions