java - 如何避免 GSON JsonObject 中的反斜杠?

标签 java json gson

我有一个 Java POJO

public class TagBean {
  private String type;
  private String id;

  public TagBean(String type, String id) {
    this.type = type;
    this.id = id;       
  }
    // getters
    // setters   
}

我正在构建 pojo 并将它们添加到列表中,如下所示

....
List<TagBean> channelsList = new ArrayList<>();
List<TagBean> showsList = new ArrayList<>();
for each <business logic> {
   if value=channels {
      channelsList.add(new TagBean(...));
   }
   if value=shows {
      showsList.add(new TagBean(...));
   }
}

Gson gson = new GsonBuilder().create();
JsonObject tjsonObject = new JsonObject();
tjsonObject.addProperty("channels", gson.toJson(channelsList));
tjsonObject.addProperty("shows", gson.toJson(showsList));

JsonObject mainjsonObject = mainjsonObject.add("tags", tjsonObject);

return mainjsonObject;

我的输出是:

{
"tags": {
    "channels": "[{\"type\":\"channel\",\"id\":\"channel\",\"name\":\"Channel\",\"parent\":\"SXM\"}]",
    "shows": "[{\"type\":\"shows\",\"id\":\"shows\",\"name\":\"Shows\",\"parent\":\"SXM\"},{\"type\":\"shows\",\"id\":\"howard\",\"name\":\"Howard Stern\",\"parent\":\"shows\"},{\"type\":\"shows\",\"id\":\"howardstern\",\"name\":\"Howard Stern\",\"parent\":\"howard\"}]",
    "sports": "[]"
}
}

如何删除反斜杠?所以输出是这样的:

{
  "tags": {
     "channels": " [{"type":"channel","id":"channel","name":"Channel","parent":"SXM"}]",
    "shows": "[{"type":"shows","id":"shows","name":"Shows","parent":"SXM"},{"type":"shows","id":"howard","name":"Howard Stern","parent":"shows"}....

其他帖子很少,但没有一个解释这一点。

最佳答案

问题是这样造成的:

tjsonObject.addProperty("channels", gson.toJson(channelsList));

它所做的是将 channelsList 转换为包含 JSON 列表表示形式的字符串,然后将属性设置为该字符串。由于字符串包含 JSON 元字符,因此当字符串第二次序列化时,它们必须被转义。

我认为你需要这样做:

tjsonObject.add("channels", gson.toJsonTree(channelsList));

这应该产生这样的结果:

{
  "tags": {
     "channels":     
        [{"type":"channel","id":"channel","name":"Channel","parent":"SXM"}],
     "shows": 
        [{"type":"shows","id":"shows","name":"Shows","parent":"SXM"},
         {"type":"shows","id":"howard","name":"Howard Stern","parent":"shows"}
   ....

这与您的问题要求的略有不同,但它的优点是语法上有效的 JSON!

关于java - 如何避免 GSON JsonObject 中的反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510733/

相关文章:

java - 由于缺少 Java 预处理器,我应该如何隔离非自由包?

java - java运行时在运行时执行类型删除时如何知道泛型类型

c# - WCF中如何通过LINQ获取Json数据?

php - JSON -> PHP 数组,很难找到特定值的索引路径

java - 使用 MongoRepository 自定义反序列化器

java - 将具有不同键类型的映射序列化为 json

java - twitter4j.TwitterException : 401:Authentication credentials were missing or incorrect

泛型方法中的 Java 有界参数

php - 如何在 Laravel 中发送 PUT 请求

java - gson 抛出 MalformedJsonException