2012-07-12 1438 views

回答

38

奇怪的是,答案是保持加回財產。我有一半期待setter方法。 :S

System.out.println("Before: " + obj.get("DebugLogId")); // original "02352" 

obj.addProperty("DebugLogId", "YYY"); 

System.out.println("After: " + obj.get("DebugLogId")); // now "YYY" 
+1

他們不應該這叫putProperty。本來會更清楚的。它也沒有說明文檔中的任何內容替代了現有的屬性,但我想這不會是有效的Json,否則。 – clu 2016-03-15 17:41:22

1

另一種方法是反序列化到一個java.util.Map,然後只需修改Java Map通緝。這將Java端數據處理和數據傳輸機制(JSON)分離開來,我更喜歡組織我的代碼:使用JSON進行數據傳輸,而不是作爲替代數據結構。

+0

謝謝,也許也是爲什麼沒有一個setter的原因。 – 2012-07-13 00:14:34

+0

如果您使用的是早期版本2(不確定確切版本,但我已經看到1.2.3和2.2.4 API之間的區別),請再次刪除()「 - 或添加()。 – orbfish 2013-10-18 21:19:29

1

它實際上都在文檔中。
JSONObject和JSONArray都可以用來替換標準的數據結構。
要執行一個setter,只需在put(String name, Object value)之前調用remove(String name)即可。

下面是一個簡單的例子:

public class BasicDB { 

private JSONObject jData = new JSONObject; 

public BasicDB(String username, String tagline) { 
    try { 
     jData.put("username", username); 
     jData.put("tagline" , tagline); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public String getUsername() { 
    String ret = null; 
    try { 
     ret = jData.getString("username"); 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return ret; 
} 

public void setUsername (String username) { 
    try { 
     jData.remove("username"); 
     jData.put("username" , username); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public String getTagline() { 
    String ret = null; 
    try { 
     ret = jData.getString("tagline"); 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return ret; 
} 
+0

錯誤的庫。首先我想知道你在哪裏得到了一個put()方法,然後我意識到你說的是JSONObject,它是json.org庫,而不是JSONObject,GSON版本。 – orbfish 2013-10-18 21:18:30

5

由於2.3 GSON庫版本的JsonArray類具有一個 '設定' 方法。

下面是一個簡單的例子:

JsonArray array = new JsonArray(); 
array.add(new JsonPrimitive("Red")); 
array.add(new JsonPrimitive("Green")); 
array.add(new JsonPrimitive("Blue")); 

array.remove(2); 
array.set(0, new JsonPrimitive("Yelow")); 
4

這適用於修改使用JSONObject childkey值。使用 導入

import org.json.JSONObject; 

前JSON:(轉換JSON文件的字符串,同時給予輸入)

{ 
    "parentkey1": "name", 
    "parentkey2": { 
    "childkey": "test" 
    }, 
} 

代碼

JSONObject jObject = new JSONObject(String jsoninputfileasstring); 
jObject.getJSONObject("parentkey2").put("childkey","data1"); 
System.out.println(jObject); 

輸出:

{ 
    "parentkey1": "name", 
    "parentkey2": { 
    "childkey": "data1" 
    }, 
} 
+0

使用正確的格式使其清晰易讀。 – 2016-11-10 07:54:45

+0

只是想強調的問題是關於com.google.gson.JsonObject而不是org.json.JSONObject。底部的選定的和最有回報的答案似乎是正確的 – javaNoober 2017-11-08 06:16:49