json将Java字符串转换为HashMap对象
我已经创建了一个将HashMap对象转换为字符串的应用程序,它工作正常,我面临的问题是我想再次将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所建议的,我已经使用了这个特性。允许使用如下所示的\u未加引号的\u字段\u名称,但现在我得到以下异常
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 楼答案
之所以会出现此错误,是因为JSON指定必须将字段名放在引号中,这与常规JavaScript对象不同。您可以通过配置
ObjectMapper
来告诉Jackson允许不带引号的字段名,以便:更新
似乎一个更基本的问题是,您试图使用Java
toString()
将映射转换为String
,并使用Jackson JSON映射器将其转换回。这两种格式完全不同,如果需要将字符串转换回对象,首先可能应该使用Jackson mapper将映射转换为JSON