-1

我有一个 java 对象,如下所示。如何使用 Jackson json 序列化/反序列化?

public class Employee {

     private String name;
     List<Employee> friends;
}

JSON:

{"friends":[{"name":"abc"}],[{{"name":"pqr"}}]}

我的实现类:

public class EmployeeImpl implements Employee, Serializable { 

    private String name;
    private List<Employee> friends;

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public List<Employee> getFriends() { return friends; }

    public void setFriends(List<Employee> friends) { this.friends = friends; } 
}

测试类:

public class Test { 

    public static void main(String[] args) throws Exception {

        String json = "{\"name\":\"gangi\", \"friends\":[{\"name\":\"abc\"},{\"name\":\"pqr\"}]}";
        Employee employee = deserializeJson(json, new TypeReference<EmployeeImpl>(){});
    }

    public static <T> T deserializeJson(String jsonData, TypeReference<T> typeRef) throws Exception {

        ObjectMapper mapper = new ObjectMapper();
        return mapper.<T>readValue(jsonData, typeRef);
    }
}

异常堆栈跟踪...

Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: 
Can not construct instance of Employee, 
problem: abstract types can only be instantiated with additional type information at 
[Source: java.io.StringReader@68da4b71; line: 1, column: 29] 
(through reference chain: EmployeeImpl["friends"]) at 
org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163‌​)
4

2 回答 2

3

将以下注释添加到您的 Employee 界面

`@JsonDeserialize(as=EmployeeImpl.class)`
于 2012-07-22T19:35:15.953 回答
0

您的 json 格式不正确。有关如何在 json 中定义数组/列表,请参阅 [http://www.json.org/]。json 构建示例 [http://java.dzone.com/tips/json-processing-using-jackson]

于 2012-07-22T16:26:40.977 回答