我正在尝试使用Jackson ObjectMapper将json字符串中的json字符串解析为一个对象。但是我找不到一种干净的方法。
我有一个SQL表,将列表存储为JSON字符串,例如"[1,2,3]"
。然后,我将所有列读到Map中,然后尝试使用objectMapper.convertValue
制成Java对象。
因此,这里有一个简短的片段可以重现问题。请注意,我无法控制实际代码中地图的生成方式。
@Data
public class Main {
private List<Integer> bar;
public static void main(String[] args) throws Exception{
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> objectMap = new HashMap<String, Object>();
objectMap.put("bar", "[1,2,3]");
// Main foo = objectMapper.convertValue(objectMap, Main.class)
String json = objectMapper.writeValueAsString(objectMap);
Main foo = objectMapper.readValue(json, Main.class);
System.out.println(foo.getBar());
}
}
但这是不对的。而不是解析字符串,ObjectMapper尝试将String直接转换为List并失败。我希望foo.getBar()返回一个包含3个元素的列表,但是代码在转换阶段已经失败了。
答案 0 :(得分:0)
您应将"[1,2,3]"
设为String[]
,这样:
"[1,2,3]".replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",")
类似的东西:
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> objectMap = new HashMap<String, Object>(){{
put("bar", "[1,2,3]".replaceAll("\\[", "")
.replaceAll("]", "")
.replaceAll("\\s", "").split(","));
}};
String json = objectMapper.writeValueAsString(objectMap);
Main foo = objectMapper.readValue(json, Main.class);
System.out.println(foo.getBar());
}
您只需将"[1,2,3]"
替换为从中获取的任何内容。
注意:不确定应用程序逻辑