为了账号安全,请及时绑定邮箱和手机立即绑定

使用 GSON 将 Java 对象转换为 JSON

使用 GSON 将 Java 对象转换为 JSON

ibeautiful 2023-08-09 17:18:17
我有一个对象数组,它是函数可以采用的参数值的列表。这可以是任何复杂的对象。我正在尝试使用 gson 从对象数组构建一个 json,如下所示:private JsonArray createArgsJsonArray(Object... argVals) {     JsonArray argsArray = new JsonArray();     Arrays.stream(argVals).forEach(arg -> argsArray.add(gson.toJson(arg)));         return argsArray; }这会将所有 arg 值视为字符串。它转义了字符串参数"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"}
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


查看完整回答
反对 回复 2023-08-09
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

如果你想最终得到一个字符串,只需执行以下操作:


private String createArgsJsonArray(Object... argVals) {

    Gson gson = new Gson();

    return gson.toJson(argVals);

}

如果您想收回并更改它,只需执行以下操作:


Object[] o = new Gson().fromJson(argValsStr, Object[].class);


查看完整回答
反对 回复 2023-08-09
?
长风秋雁

TA贡献1757条经验 获得超7个赞

尝试使用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));


查看完整回答
反对 回复 2023-08-09
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信