猿问

使用 GSON 将 Java 对象转换为 JSON

我有一个对象数组,它是函数可以采用的参数值的列表。这可以是任何复杂的对象。

我正在尝试使用 gson 从对象数组构建一个 json,如下所示:

private JsonArray createArgsJsonArray(Object... argVals) {
    JsonArray argsArray = new JsonArray();
    Arrays.stream(argVals).forEach(arg -> argsArray.add(gson.toJson(arg)));
        return argsArray;
}
  1. 这会将所有 arg 值视为字符串。

  2. 它转义了字符串参数

    "args":["\"STRING\"","1251996697","85"]

我更喜欢以下输出:

   "args":["STRING",1251996697,85]

有没有办法使用 gson 来实现这一点?

我使用了org.json,我能够达到预期的结果,但它不适用于复杂的对象。

编辑:

我应用了 @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"}


ibeautiful
浏览 158回答 3
3回答

慕码人8056858

使用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"]]

眼眸繁星

如果你想最终得到一个字符串,只需执行以下操作:private String createArgsJsonArray(Object... argVals) {    Gson gson = new Gson();    return gson.toJson(argVals);}如果您想收回并更改它,只需执行以下操作:Object[] o = new Gson().fromJson(argValsStr, Object[].class);

长风秋雁

尝试使用setPrettyPrinting转义DisableHtml。Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(jsonArray.toString()); System.out.println( gson.toJson(je));
随时随地看视频慕课网APP

相关分类

Java
我要回答