[英]Data entry using com.google.gson
我正在嘗試創建一個Gson對象,其中將包含不同的類別和條目,這是我嘗試執行的示例:
JsonObject jo = new JsonObject();
JsonArray ja = new JsonArray();
JsonObject mainObj = new JsonObject();
jo.addProperty("firstName", "John");
jo.addProperty("lastName", "Doe");
ja.add(jo);
mainObj.add("employees", ja);
jo = new JsonObject();
ja = new JsonArray();
jo.addProperty("firstName", "jean");
jo.addProperty("lastName", "dorian");
ja.add(jo);
mainObj.add("employees", ja);
jo = new JsonObject();
ja = new JsonArray();
jo.addProperty("firstName", "toto");
jo.addProperty("lastName", "tata");
ja.add(jo);
mainObj.add("manager", ja);
問題是您可以看到我每次必須創建一個新的JSonObject和Array時,我認為這不是最佳實踐,而且“員工”中的舊值也被第二個替換。 有人可以幫我嗎?
溴
傑里米
我每次都必須創建一個新的JSonObject和Array,我認為這不是最佳實踐
我認為這樣做是完全可以的。
而且“員工”中的舊值也被第二個值所取代
問題是您想在JsonObject
兩次添加一個映射"employees" -> JsonArray
。 盡管在線JSON解析器(例如JSONLint)對此沒有說明,但實際上不建議在JsonObject
兩個相同的鍵。
RFC 7159第4章對此進行了解釋:
從名稱接收到的所有軟件實現都將在名稱-值映射上達成一致的意義上來說,名稱都是唯一的對象是可以互操作的。 如果對象中的名稱不是唯一的,則接收到該對象的軟件的行為是不可預測的。 許多實現僅報告姓/值對。 其他實現報告錯誤或無法解析對象,某些實現報告所有名稱/值對,包括重復項。
在LinkedTreeMap
, JsonObject
結構通過LinkedTreeMap
實現以保存映射。 添加新映射時, put
調用put
方法,該方法將刪除以前的映射值(如果有)。
90 @Override public V put(K key, V value) {
91 if (key == null) {
92 throw new NullPointerException("key == null");
93 }
94 Node<K, V> created = find(key, true);
95 V result = created.value;
96 created.value = value;
97 return result;
98 }
如果要向該數組添加另一個Employee
,則不應將其直接添加到JsonObject
並創建一個新的JsonArray
。
JsonObject jo = new JsonObject();
JsonArray ja = new JsonArray();
JsonObject mainObj = new JsonObject();
jo.addProperty("firstName", "John");
jo.addProperty("lastName", "Doe");
ja.add(jo);
//remove this line
mainObj.add("employees", ja);
jo = new JsonObject();
//and remove this line
ja = new JsonArray();
jo.addProperty("firstName", "jean");
jo.addProperty("lastName", "dorian");
ja.add(jo);
mainObj.add("employees", ja);
jo = new JsonObject();
ja = new JsonArray();
jo.addProperty("firstName", "toto");
jo.addProperty("lastName", "tata");
ja.add(jo);
mainObj.add("manager", ja);
這將導致:
{
"employees": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "jean",
"lastName": "dorian"
}
],
"manager": [
{
"firstName": "toto",
"lastName": "tata"
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.