如何避免在GSON JsonObject中使用反斜杠?

tvokkenx  于 2022-11-06  发布在  其他
关注(0)|答案(5)|浏览(257)

我有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中,

....
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"}....

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

jrcvhitl

jrcvhitl1#

该问题是由以下原因引起的:

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的优点!

44u64gxh

44u64gxh2#

问题是gson.toJson返回一个String,而
tjsonObject.addProperty("channels", gson.toJson(channelsList));
这将以字符串而不是JSON对象的形式添加频道。一个可能的解决方案是首先将从gson.toJson返回的字符串转换为JSON对象,然后将其添加到父JSON对象中,如下所示

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

这将把频道和节目视为JSON对象

mmvthczy

mmvthczy3#

String mainJsonStr = mainjsonObject.toString();
    mainJsonStr = mainJsonStr.replace("\\\\", ""); //replace the \
    System.out.println(mainJsonStr);
2mbi3lxu

2mbi3lxu4#

java中的所有字符串都必须转义引号。所以jsonInString中应该有斜杠。当你输出jsonInString时,它不应该有引号。你是在调试器中查看它还是什么?

直接解析json并检查-将获得输出

fhity93d

fhity93d5#

以上解决方案自GSON 2.8.* 使用gson.toJsonTree(jsonText).getAsString()后不再起作用;取而代之

相关问题