我已经创建了一个将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();
}
答案 0 :(得分:2)
您收到此错误是因为JSON指定您必须将字段名称放在引号中,这与常规JavaScript对象不同。您可以通过配置ObjectMapper
so:
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
<强>更新强>
一个更基本的问题似乎是您尝试使用 Java toString()
将地图转换为String
和Jackson JSON映射器将其转换回来。这两种格式完全不同,如果你需要能够将字符串转换回对象,你应该首先使用Jackson映射器将地图转换为JSON。