【发布时间】:2019-08-23 07:01:05
【问题描述】:
我正在尝试使用 Jackson ObjectMapper 将 json 字符串中的 json 字符串解析为对象。但我找不到一个干净的方法来做到这一点。
我有一个 SQL 表,将列表存储为 json 字符串,例如 "[1,2,3]"。我将所有列读入 Map 然后尝试使用 objectMapper.convertValue 制作成 Java 对象。
所以这里有一个快速的 sn-p 来重现问题。请注意,我不控制在实际代码中如何生成地图。
@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 个元素的 List,但代码在转换阶段已经失败。
【问题讨论】:
-
尝试使用
"[{1},{2},{3}]"。并确保您在Main中声明了一个字段,即@JsonProperty("bar") List<Integer>;