JSON文字列をGSONが提供するJsonObjectクラスに解析したら(意味のあるデータオブジェクトに解析したくないが、厳密にJsonObjectを使用したい場合)、どのようにしてフィールド/値を変更できますか直接キー?
私に役立つ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"
これは、JSONObject
を使用してchildkey値を変更するために機能します。使用されるインポートは
import org.json.JSONObject;
ex 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"
},
}
Gsonライブラリの2.3バージョン以降、JsonArrayクラスには「set」メソッドがあります。
以下に簡単な例を示します。
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"));
別のアプローチは、Java.util.Map
に逆シリアル化し、必要に応じてJava Map
を変更するだけです。これにより、Java側のデータ処理がデータ転送から分離されます。メカニズム(JSON)。これは、コードを整理する方法です。データ転送にJSONを使用し、代わりのデータ構造として使用します。
実際にはすべてドキュメントにあります。
JSONObjectとJSONArrayの両方を使用して、標準のデータ構造を置き換えることができます。
セッターを実装するには、remove(String name)
の前にput(String name, Object value)
を呼び出すだけです。
以下に簡単な例を示します。
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;
}