解析时,json(gson)解析会更改数据类型

时间:2015-08-28 12:10:05

标签: java json string gson

我有一个json字符串,看起来像这样:

{"employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]}

当我使用gson解析器将其转换为Map<String,String> map时。 gson将类型转换为Map<String,ArrayList>。当我尝试使用System.out.println(map.get("employees").getClass().toString())打印班级名称时。但这引发了异常 - java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String

我的代码看起来像这样

String npv = json_string_provided_above;
Map<String,String> mp = new HashMap<String, String>();
mp = new Gson().fromJson(npv,mp.getClass());
System.out.println(mp.get("employees").getClass().toString());

json由用户以字符串格式输入(并且它将始终是有效的json字符串)。有一点可以肯定的是,我无法假设任何有关数据类型的内容。因为它将由用户提供。

所以现在实际上我想要它甚至如果用户输入类似字符串数组或对象数组的东西。它不应该将它们转换为List,

我是否有办法对类型进行硬编码并将其保存在Map<String,String>中。所以在上面的例子中我做map.get("employees")它应该给我[{"firstName":"John", "lastName":"Doe"},{"firstName":"Anna", "lastName":"Smith"},{"firstName":"Peter", "lastName":"Jones"}]作为字符串而不是列表。我不知道该怎么做。

感谢您的帮助,

1 个答案:

答案 0 :(得分:-1)

Jon是对的,只需使用Map<String, Object>

String npv = json_string_provided_above;
Map<String,Object> mp = new HashMap<String, Object>();
mp = new Gson().fromJson(npv, mp.getClass());
System.out.println(mp.get("employees").toString());