Java - Jackson JSON Library和ObjectMapper.readValue

时间:2015-07-05 21:29:16

标签: java json jackson

我有以下json数据(patients.json):

{ 
    "A" : { 
        "name" : "Tom", 
        "age" : 12 
    }, 
    "B" : { 
        "name" : "Jim", 
        "age" : 54 
    } 
}

使用Jackson JSON库,我怎样才能获得如下内容:

HashMap<String, ???> patients = objectMapper.readValue(new File("patients.json"), ???);

String Aname = patients.get("A").get("name");
int Aname = patients.get("A").get("age");

2 个答案:

答案 0 :(得分:3)

将您的JSON反序列化为Jackson的JSON对象类型ObjectNode。然后,您可以根据需要遍历它。

例如

ObjectNode patients = objectMapper.readValue(new File("test.json"), ObjectNode.class);
// you can check if it is actually an ObjectNode with JsonNode#isObject()
ObjectNode nodeA = (ObjectNode)patients.get("A");

String name = nodeA.get("name").asText();
int age = (int) nodeA.get("age").asLong();

请注意,如果目标节点无法转换为该类型,则方法asXyz()将返回默认值。在调用它们之前,您可以使用相应的isXyz()方法进行检查。

答案 1 :(得分:1)

您可以创建一个类来映射患者;

private static class Patient {
    @JsonProperty("name")
    private String name;
    @JsonProperty("age")
    private int age;

    public Patient() { }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

然后通过杰克逊

读取你的json
HashMap<String, Patient> patients = objectMapper.readValue(new File("patients.json"), new TypeReference<HashMap<String,Patient>>() {});
Patient patientA = patients.get("A");
String patientAName = patientA.getName();
int pateintAAge = patientA.getAge();