簡體   English   中英

使用com.google.gson進行數據輸入

[英]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章對此進行了解釋:

從名稱接收到的所有軟件實現都將在名稱-值映射上達成一致的意義上來說,名稱都是唯一的對象是可以互操作的。 如果對象中的名稱不是唯一的,則接收到該對象的軟件的行為是不可預測的。 許多實現僅報告姓/值對。 其他實現報告錯誤或無法解析對象,某些實現報告所有名稱/值對,包括重復項。

LinkedTreeMapJsonObject結構通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM