java - 使用 Jackson 解析 JSON。为什么使用 HashMap 而不是我的类型?

标签 java json jackson

我正在使用 Jackson 库来解析 JSON:

{
"employees": [
{ "firstName":"John" , "lastName":"Doe" }, 
{ "firstName":"Anna" , "lastName":"Smith" }, 
{ "firstName":"Peter" , "lastName":"Jones" }
]
}

这就是我正在做的事情:

public void testJackson() throws IOException {
    JsonFactory factory = new JsonFactory();
    ObjectMapper mapper = new ObjectMapper(factory);
    File from = new File("emp.txt"); // JSON object comes from
    TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {};
    HashMap<String, Object> o = mapper.readValue(from, typeRef);
    Employees employees = new Employees();
    employees.employees = (List<Employer>)o.get("employees"); // retrieving list of Employer(s)
    employees.showEmployer(1); // choose second to print out to console

    System.out.println("Got " + o); // just result of file reading
}

public static class Employees {
    public List<Employer> employees;

    public void showEmployer(int i) {
        System.out.println(employees.get(i));
    }
}

public static class Employer {
    public String firstName;
    public String lastName;
}

我得到的输出:

{firstName=Anna, lastName=Smith}

Got {employees=[{firstName=John, lastName=Doe}, {firstName=Anna, lastName=Smith}, {firstName=Peter, lastName=Jones}]}

但我并不期望 List 中的元素是 HashMap 实例,而是 Employer 对象。这就是 Jackson 库应该有的样子,不是吗?你们能纠正我哪里错了吗?

最佳答案

我没有使用过 Jackson,但看起来你得到了你想要的东西 - 字符串、对象对的 HashMap。也许您需要在 map 的“值(value)”部分更加明确?由于该值是 Employee 对象的数组,您可以尝试:

TypeReference<HashMap<String, List<Employee>>> typeRef = new TypeReference<HashMap<String, List<Employee>>>() {};
HashMap<String, List<Employee>> o = mapper.readValue(from, typeRef);

关于java - 使用 Jackson 解析 JSON。为什么使用 HashMap 而不是我的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594484/

相关文章:

java.lang.IllegalStateException : LifecycleProcessor not initialized . ...上下文 - 在我的聊天应用程序上

Java SWT 重叠/多个 StyleRanges

java - 如何使用 Gson 为该 Json 文件设置响应类?

java - 使用嵌套类将 JSON 转换为 POJO

java - 为什么 Spring Security 拦截 url 顺序很重要

java - tomcat服务器如何识别客户端以创建 session ID

css - 如何在 cytoscapejs 中指定离散映射器样式?

javascript - 使用 TAU 库在 Tizen Web 应用程序中解析 JSON

java - 将两个相似的 json 字段编码到同一个 java 字段

java - Spring boot - Jackson日期序列化和反序列化