42

JSON 文字列を GSON 提供の JsonObject クラスに解析したら (意味のあるデータ オブジェクトに解析したくないが、厳密には JsonObject を使用したいと仮定します)、どのようにフィールド/値を変更できますか?直接キー?

役立つ API が見つかりません。

https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html

4

6 に答える 6

85

奇妙なことに、答えはプロパティを追加し続けることです。私は方法を半分期待していましたsetter。:S

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

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

System.out.println("After: " + obj.get("DebugLogId")); // now "YYY"
于 2012-07-12T02:01:03.560 に答える
13

これは、を使用して childkey 値を変更する場合に機能しJSONObjectます。インポート使用は

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"
    },
}
于 2016-11-10T07:33:16.313 に答える
8

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"));
于 2014-10-01T13:40:30.803 に答える
1

別のアプローチは、にデシリアライズしてから、必要に応じjava.util.Mapて JavaMapを変更することです。これにより、Java 側のデータ処理がデータ トランスポート メカニズム (JSON) から分離されます。これは、私がコードを整理するのに好んで使用する方法です。代替データ構造としてではなく、データ トランスポートに JSON を使用します。

于 2012-07-12T17:38:28.250 に答える