Jackson-Json字符串转换为Java的类列表

时间:2018-12-06 10:32:06

标签: java jackson

我正在尝试使用Jackson将JSON字符串映射到Java类。

public class ChartData {
    List<String> xAxis=new ArrayList<String>();
    List<String> yAxis=new ArrayList<String>();
    List<String> zAxis=new ArrayList<String>();
    String type;

    public ChartData() {

    }

    public ChartData(String type, List<String> yAxis, List<String> zAxis) {
        this.type = type;
        this.yAxis = yAxis;
        this.zAxis = zAxis;

    }

我尝试的代码:

List<ChartData> emp = new ArrayList<>();
String o2 ="[{\"type\": \"2\", \"yAxis\": [\"11\"], \"zAxis\": [\"8\"]}, {\"type\": \"3\", 
             \"yAxis\": [\"17\", \"13\", \"12\"], \"zAxis\": [\"14\", \"13\", \"12\"]}]";
ObjectMapper mapper = new ObjectMapper();
data= (List<ChartData>) mapper.readValue(o2, ChartData.class);

return data;

但是,出现以下错误:

  

无法从START_ARRAY令牌中反序列化com.ChartData实例   在[来源:[{“ type”:“ 2”,“ yAxis”:[“ 11”],“ zAxis”:[“ 8”]},{“ type”:   “ 3”,“ yAxis”:[“ 17”,“ 13”,“ 12”],“ zAxis”:[“ 14”,“ 13”,“ 12”]}]];线:   1,列:1]

我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

有一种在杰克逊中反序列化为列表的特定方法:

List<ChartData> data = mapper.readValue(o2 , new TypeReference<List<ChartData>>(){});

在您的代码中,您还需要在转换中输入不匹配项。您正在使用mapper.readValue(o2, ChartData.class),但将其投射到List<ChartData>

要保持基本的类型转换(不使用TypeReference),可以通过以下方式将json反序列化为数组:

ChartData[] data = mapper.readValue(o2 , ChartData[].class);

,然后根据需要将其转换为列表。