user2761431:
私は、関数が取ることができる引数の値のリストであるオブジェクトの配列を持っています。これは、任意の複雑なオブジェクトである可能性があります。
私は以下のようにgsonを使用してオブジェクト配列のJSONのうちを構築しようとしています:
private JsonArray createArgsJsonArray(Object... argVals) {
JsonArray argsArray = new JsonArray();
Arrays.stream(argVals).forEach(arg -> argsArray.add(gson.toJson(arg)));
return argsArray;
}
- これは扱い文字列など、すべての引数の値を。
これは、文字列の引数をエスケープ
"args":["\"STRING\"","1251996697","85"]
私は次の出力を好みます:
"args":["STRING",1251996697,85]
この使用gsonを達成するための方法はありますか?
私が使用org.json
私が所望の結果を達成することができました、が、それは複雑なオブジェクトに対しては動作しません。
EDIT:
私はのMichałZiober @が提供するソリューションを適用したが、今どのように私は戻ってオブジェクトを取得します。
Gson gson = new Gson();
Object strObj = "'";
JsonObject fnObj = new JsonObject();
JsonObject fnObj2 = new JsonObject();
fnObj.add("response", gson.toJsonTree(strObj));
fnObj2.addProperty("response", gson.toJson(strObj));
System.out.println(gson.fromJson(fnObj.toString(),
Object.class)); --> prints {response='} //Not what I want!
System.out.println(gson.fromJson(fnObj2.toString(),
Object.class)); --> prints {response="\u0027"}
マイケルZiober:
使用toJsonTree
方法:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import java.util.Date;
public class GsonApp {
public static void main(String[] args) {
GsonApp app = new GsonApp();
System.out.println(app.createArgsJsonArray("text", 1, 12.2D));
System.out.println(app.createArgsJsonArray(new Date(), new A(), new String[] {"A", "B"}));
}
private Gson gson = new GsonBuilder().create();
private JsonArray createArgsJsonArray(Object... argVals) {
JsonArray argsArray = new JsonArray();
for (Object arg : argVals) {
argsArray.add(gson.toJsonTree(arg));
}
return argsArray;
}
}
class A {
private int id = 12;
}
上記のコードを印刷:
["text",1,12.2]
["Sep 19, 2019 3:25:20 PM",{"id":12},["A","B"]]