首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Json:使用Gson库时出现反序列化错误

Json:使用Gson库时出现反序列化错误
EN

Stack Overflow用户
提问于 2013-06-06 18:03:30
回答 2查看 1.2K关注 0票数 1

Json使用:

代码语言:javascript
运行
复制
 String jsonString = "{
    "varA": "<math><mrow><mn>8</mn></mrow></math>",
    "varB": "<math><mrow><mi>m</mi></mrow></math>",
    "ans": "<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>"
 }"

将json转换为Map的代码:

代码语言:javascript
运行
复制
Map<String, String> variableMap = gson.fromJson(jsonString, new TypeToken<Map<String,String>>(){}.getType());

错误:

代码语言:javascript
运行
复制
[ERROR] The JsonDeserializer StringTypeAdapter failed to deserialize json object {"varA":"<math><mrow><mn>8</mn></mrow></math>","varB":"<math><mrow><mi>m</mi></mrow></math>","ans":"<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>"} given the type class java.lang.String

我知道这与类型有关,但我已经指出,类型将在类型标记中显式为String。

gson对象声明如下:

代码语言:javascript
运行
复制
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
EN

回答 2

Stack Overflow用户

发布于 2013-06-06 20:22:15

必须转义分隔Java字符串中包含的JSON字符串值的引号。实际上,您的示例并不是一个有效的Java程序--对于初学者来说,Java缺少多行字符串。

下面的代码片段运行正常(尖括号和Unicode字符被证明是无害的):

代码语言:javascript
运行
复制
public static void main(String[] args) {
         String jsonString = "{\"varA\": \"<math><mrow><mn>8</mn></mrow></math>\", \"varB\": \"<math><mrow><mi>m</mi></mrow></math>\", \"ans\": \"<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>\"}";
         Map<String, String> variableMap = new Gson().fromJson(jsonString, new TypeToken<Map<String,String>>(){}.getType());
         System.out.println("foo");
    }
票数 2
EN

Stack Overflow用户

发布于 2013-06-06 20:47:21

当您使用Map.class而不是新的TypeToken<Map<String,String>>(){}.getType()时,它是有效的。请看我的小示例:

代码语言:javascript
运行
复制
Gson gson = new GsonBuilder().disableHtmlEscaping().create();

Map<String, String> map = new HashMap<String, String>();
map.put("varA", "<math><mrow><mn>8</mn></mrow></math>");
map.put("varB", "<math><mrow><mi>m</mi></mrow></math>");
map.put("ans", "<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>");

String json = gson.toJson(map);

System.out.println(json);
System.out.println(gson.fromJson(json, Map.class));

它打印:

代码语言:javascript
运行
复制
{
   "varB":"<math><mrow><mi>m</mi></mrow></math>",
   "ans":"<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>",
   "varA":"<math><mrow><mn>8</mn></mrow></math>"
}

{varB=<math><mrow><mi>m</mi></mrow></math>, ans=<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>, varA=<math><mrow><mn>8</mn></mrow></math>}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16959219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档