我知道有关此问题的类似帖子,但请在标记为重复之前仔细阅读。
我有一个文本字符串,我想转换为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对象。
我做错了什么? 谢谢。
答案 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);