有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    之所以会出现此错误,是因为JSON指定必须将字段名放在引号中,这与常规JavaScript对象不同。您可以通过配置ObjectMapper来告诉Jackson允许不带引号的字段名,以便:

    mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    

    更新

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