无法将json对象反序列化为映射

时间:2016-03-21 13:58:32

标签: java json

我知道有关此问题的类似帖子,但请在标记为重复之前仔细阅读。

我有一个文本字符串,我想转换为JSON行/实例,然后转换为Java地图变量,所以我可以单独访问每个属性。 这是我的字符串:

{"S3_r5_Ahf": "0.00025", "S15_r6_Alf": "-0.00514", "S6_r4_Alf": "-0.00126", "S12_r9_Alf": "-0.00595", "S13_r8_Ahf": "0.00018", "S1_r9_Alf": "-0.00385", "S8_r10_Alf": "-0.00849" }

使用GSON库我使用:

将字符串转换为json对象
Gson gson = new Gson();
String json = gson.toJson(s);

这很好用,输出是:

"{\"S3_r5_Ahf\": \"0.00025\", \"S15_r6_Alf\": \"-0.00514\", \"S6_r4_Alf\": \"-0.00126\", \"S12_r9_Alf\": \"-0.00595\", \"S13_r8_Ahf\": \"0.00018\", \"S1_r9_Alf\": \"-0.00385\", \"S8_r10_Alf\": \"-0.00849\"

问题在于我尝试使用以下方法将其转换为地图:

Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> retMap = gson.fromJson(json,type);

当我尝试打印retMap时,我收到错误:JsonDeserializer MapTypeAdapter无法反序列化要映射的json对象。

我做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:1)

您的Java字符串s已经是JSON格式(即&#34; JSON行/实例&#34;),因此您不需要在其上调用gson.toJson() (这会把它变成一个JSON字符串,它不是JSON映射,因此不能解析为一个)。

试试吧:

Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> retMap = gson.fromJson(s,type);