あなたは目標を達成するために、地図を使用できるため
。極端な場合には(私が意味する、場合にあなたが任意のクラスを作成する必要はありません)、あなたはこのJSONを作成する場合:
{
"sleep":{
"userInfo":{
"firstName":"Hans",
"lastName":"Schmidt",
"country":"Germany",
"city":"Berlin"
},
"settings":{
"setting2":"none",
"setting1":"y"
},
"program":{
"appVersion":"1.7",
"serverVersion":19,
"appName":"name"
},
"userType":"new"
}
}
あなたが行うことができます:
Gson gson = new Gson();
Map<String, Object> finalObject= new HashMap<>();
Map<String, Object> sleep= new HashMap<>();
Map<String, Object> program= new HashMap<>();
Map<String, String> userInfo= new HashMap<>();
Map<String, Object> settings= new HashMap<>();
program.put("appName", "name");
program.put("appVersion", "1.7");
program.put("serverVersion", 19);
userInfo.put("firstName", "Hans");
userInfo.put("lastName", "Schmidt");
userInfo.put("city", "Berlin");
userInfo.put("country", "Germany");
settings.put("setting1", "y");
settings.put("setting2", "none");
sleep.put("program", program);
sleep.put("userType", "new");
sleep.put("userInfo", userInfo);
sleep.put("settings", settings);
finalObject.put("sleep", sleep);
System.out.println(gson.toJson(finalObject));
しかし、別の答えで述べたように、しばしばPOJOを作成することが推奨されます。
EDIT
は、これを実行するために別の方法があります。あなたは、あなたが(繰り返しをマッピングを改善し、排除するために)クラスを作成する必要があり、常に同じコードを使用することに気付いた場合
JsonObject finalJsonObject= new JsonObject();
JsonObject jsonSleep= new JsonObject();
JsonObject jsonProgram= new JsonObject();
JsonObject jsonUserInfo= new JsonObject();
JsonObject jsonSettings= new JsonObject();
jsonUserInfo.addProperty("firstName", "Hans");
jsonUserInfo.addProperty("lastName", "Schmidt");
jsonUserInfo.addProperty("country", "Germany");
jsonUserInfo.addProperty("city", "Berlin");
jsonSettings.addProperty("setting2", "none");
jsonSettings.addProperty("setting1", "y");
jsonProgram.addProperty("appVersion", "1.7");
jsonProgram.addProperty("serverVersion", 19);
jsonProgram.addProperty("appName", "name");
jsonSleep.add("userInfo", jsonUserInfo);
jsonSleep.add("settings", jsonSettings);
jsonSleep.add("program", jsonProgram);
jsonSleep.addProperty("userType", "new");
finalJsonObject.add("sleep", jsonSleep);
System.out.println(String.valueOf(finalJsonObject));
:JsonObjectクラスを使用します。数回使用するクラスがいくつかある場合、この方法を使用することができます(必要な各クラスを作成しないでください)。
何が問題なのですか?gsonがあなたの仕事をしますか? –
jsonのpojo表現が必要な場合は、提案したようなさまざまなツリーレベルに異なるクラスが必要です。あなたがおそらく(私はGsonを知らないが、私はそれがJacksonと非常に似ていると思うだろう)必要がないなら、map/JSONObjectインスタンスとlists/JSONArrayインスタンスの組み合わせを使用するだけでもよい。 – Thomas
あなたはクラスを書くだけで、お互いに実装することができます.Gsonは仕事をします –