将Java String转换为HashMap对象

时间:2014-10-28 06:12:52

标签: java json jackson

我已经创建了一个将HashMap对象转换为String的应用程序,它的工作正常,我面临的问题是我想将HashMap字符串再次转换回HasMap对象,当我尝试使用以下代码时,我得到例外,如下所示

Unexpected character ('u' (code 117)): was expecting double-quote to start field name

任何人都可以告诉我一些解决方案吗

我的代码如下:

Map<String,Object> map = new HashMap<String,Object>();
map.put("userVisible", true);
map.put("userId", "1256");

ObjectMapper mapper = new ObjectMapper();
try {
    map =  mapper.readValue(map.toString(), new TypeReference<HashMap<String,Object>>(){});
    System.out.println(map.get("userId"));
} catch (Exception e) {
    e.printStackTrace();
}

更新1

正如@chrylis所建议的,我使用了如下所示的Feature.ALLOW_UNQUOTED_FIELD_NAMES,但现在我得到以下异常

Unexpected character ('=' (code 61)): was expecting a colon to separate field name and value

更新代码

Map<String,Object> map = new HashMap<String,Object>();
map.put("userVisible", true);
map.put("userId", "1256");
ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
try {
    map =  mapper.readValue(map.toString(), new TypeReference<HashMap<String,Object>>(){});
    System.out.println(map.get("userId"));
} catch (Exception e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:2)

您收到此错误是因为JSON指定您必须将字段名称放在引号中,这与常规JavaScript对象不同。您可以通过配置ObjectMapper so:

告诉Jackson允许不带引号的字段名称
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

<强>更新

一个更基本的问题似乎是您尝试使用 Java toString() 将地图转换为String和Jackson JSON映射器将其转换回来。这两种格式完全不同,如果你需要能够将字符串转换回对象,你应该首先使用Jackson映射器将地图转换为JSON。