一旦我已經解析了一個JSON字符串到一個GSON提供的JsonObject類中(假設我不想將它解析爲任何有意義的數據對象,但嚴格要使用JsonObject),我如何能夠修改字段/值一鍵直接?如何直接修改JsonObject/JsonArray的值?
我沒有看到可幫助我的API。
https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html
一旦我已經解析了一個JSON字符串到一個GSON提供的JsonObject類中(假設我不想將它解析爲任何有意義的數據對象,但嚴格要使用JsonObject),我如何能夠修改字段/值一鍵直接?如何直接修改JsonObject/JsonArray的值?
我沒有看到可幫助我的API。
https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html
奇怪的是,答案是保持加回財產。我有一半期待setter
方法。 :S
System.out.println("Before: " + obj.get("DebugLogId")); // original "02352"
obj.addProperty("DebugLogId", "YYY");
System.out.println("After: " + obj.get("DebugLogId")); // now "YYY"
另一種方法是反序列化到一個java.util.Map
,然後只需修改Java Map
通緝。這將Java端數據處理和數據傳輸機制(JSON)分離開來,我更喜歡組織我的代碼:使用JSON進行數據傳輸,而不是作爲替代數據結構。
謝謝,也許也是爲什麼沒有一個setter的原因。 – 2012-07-13 00:14:34
如果您使用的是早期版本2(不確定確切版本,但我已經看到1.2.3和2.2.4 API之間的區別),請再次刪除()「 - 或添加()。 – orbfish 2013-10-18 21:19:29
它實際上都在文檔中。
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;
}
錯誤的庫。首先我想知道你在哪裏得到了一個put()方法,然後我意識到你說的是JSONObject,它是json.org庫,而不是JSONObject,GSON版本。 – orbfish 2013-10-18 21:18:30
由於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"));
這適用於修改使用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"
},
}
使用正確的格式使其清晰易讀。 – 2016-11-10 07:54:45
只是想強調的問題是關於com.google.gson.JsonObject而不是org.json.JSONObject。底部的選定的和最有回報的答案似乎是正確的 – javaNoober 2017-11-08 06:16:49
他們不應該這叫putProperty。本來會更清楚的。它也沒有說明文檔中的任何內容替代了現有的屬性,但我想這不會是有效的Json,否則。 – clu 2016-03-15 17:41:22