我有一个json字符串如下图:
{"person":[{"initials":"C. P.","familyName":"Mangum"}],"title":"Blood and tissue oxygen carriers","text":"(ed). \992d. Springer-Verlag, Heidelberg"}
反序列化上述json字符串时使用gson,如下所示:
gson.fromJson(json, MyObject.class)
我看到MalformedJsonException
异常。
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Invalid escape sequence at line 1 column 115 path $.test
然后,我尝试将JsonReader
setLenient设置为true
JsonReader reader = new JsonReader(new StringReader(row));
reader.setLenient(true);
gson.fromJson(reader, MyObject.class);
但现在我得到ClassCastException
:
Caused by: java.lang.ClassCastException: class MyObject cannot be cast to class com.google.gson.JsonElement (MyObject and com.google.gson.JsonElement are in unnamed module of loader 'app')
后来,我尝试在GsonBuilder中使用setLenient(),但它失败了,出现了原始的MalformedJsonException
异常
Gson gson = new GsonBuilder().setLenient().create();
gson.fromJson(row, MyObject.class);
我不确定我是否可以使用theString = theString.replace("\\", "\\\\");
是安全的。有好的做法可以遵循吗?
我可以请知道我如何处理转义字符如上?
2条答案
按热度按时间ha5z0ras1#
json的格式不正确,它应该以原始格式为
\\992d
提供双精度\:ogq8wdun2#
你需要如下转义你的“text”元素,那么它将是一个有效的json。
Apache共享资源
如果您已经在使用Apache commons,它提供了一个静态方法:
它将任何字符串转换为正确转义的字符串,以便包含在JSON中。
https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringEscapeUtils.html