提问人:Dreamer 提问时间:11/10/2023 最后编辑:Dreamer 更新时间:11/10/2023 访问量:49
GSON 将 String 转换为 JSON 的值中包含 url
GSON convert String to JSON with url in the value
问:
我使用 method 将 Map 对象转换为 String。但是,它从每个键和值中带上了双引号toString()
{title=mytitle, iss=https://google.com}
instead of
{"title"="mytitle", "iss"="https://google.com"}
然后当我尝试将其转换为JSON对象时,GSON
Map<String, ? extends Object> objectMap= GSON.fromJson(myMap.toString(), Map.class);
它遇到了。
Unterminated object at line 1 column 34 path $.
我可以看到导致问题的正斜杠
在将映射对象转换为字符串时,我可以使用任何 API 或函数来保留双引号,或者任何方法可以让 GSON 避免验证?我试过了,但没有用。/
setLient()
编辑:
我不能使用的原因是这个线程 GSON 将数组解析为 TreeMap,因为条目下有额外的内容GSON.toJson(object)
values
role
答:
1赞
Reilas
11/10/2023
#1
"...我使用
toString()
方法将 Map 对象转换为 String。但是,它从每个键和值中划出双引号......”
请注意,这些结构一开始是不可互换的。
只有 JSON 对象才会被视为映射或字典。
此外,Map 对每个条目使用等号,而不是冒号。
如果 JSON 很简单,只需实现自己的 JSON 即可。
下面是一个示例。
StringBuilder s = new StringBuilder();
for (Map.Entry<String, String> e : m.entrySet()) {
if (!s.isEmpty()) s.append(", ");
s.append("\"%s\": \"%s\"".formatted(e.getKey(), e.getValue()));
}
s.insert(0, '{').append('}');
输出
{"title": "mytitle", "iss": "https://google.com"}
评论
1赞
Marcono1234
11/11/2023
应避免手动创建这样的 JSON 字符串,尤其是在您已经在使用 JSON 库的情况下。对于这些简单的值,它可能会起作用,但如果将来它们包含任何需要转义的字符,那么这将中断;或者,根据用例的不同,可能会被恶意用户利用。OP 应该真正使用 ,并且正如他们的另一个问题中提到的,找出额外的来源。Gson.toJson
values
0赞
Reilas
11/11/2023
@Marcono1234,这有点无关紧要。我的意思是,他们也可能写错代码。有一个 JSON 的 RFC,请查看,datatracker.ietf.org/doc/html/rfc8259。
0赞
Marcono1234
11/12/2023
它不是无关紧要的。如果你看一下OP的另一个问题,你会看到他们在JWT的上下文中问这个问题,所以这很可能有一个安全方面。运行你的代码,你突然在JSON中注入了一个条目。是的,这些 JSON 库可能包含错误,但 Gson 已有 10 多年的历史,并且有很多单元测试,因此它在 JSON 序列化错误时逃脱的可能性非常低。var m = Map.of("title", "mytitle\",\"sub\":\"admin")
"sub":"admin"
评论
Gson.toJson
Object.toString
values