我有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"}....
其他帖子很少,但没有一个解释这一点。
5条答案
按热度按时间jrcvhitl1#
该问题是由以下原因引起的:
这样做的目的是将
channelsList
转换为一个包含JSON列表表示的字符串,然后将属性设置为该字符串。由于该字符串包含JSON元字符,因此在对字符串进行第二次序列化时,必须对它们进行转义。这应该产生这样的结果:
这与您的问题稍有不同,但它具有语法上有效的JSON的优点!
44u64gxh2#
问题是
gson.toJson
返回一个String,而tjsonObject.addProperty("channels", gson.toJson(channelsList));
个这将以字符串而不是JSON对象的形式添加频道。一个可能的解决方案是首先将从
gson.toJson
返回的字符串转换为JSON对象,然后将其添加到父JSON对象中,如下所示这将把频道和节目视为JSON对象
mmvthczy3#
2mbi3lxu4#
java中的所有字符串都必须转义引号。所以jsonInString中应该有斜杠。当你输出jsonInString时,它不应该有引号。你是在调试器中查看它还是什么?
直接解析json并检查-将获得输出
fhity93d5#
以上解决方案自GSON 2.8.* 使用gson.toJsonTree(jsonText).getAsString()后不再起作用;取而代之