如何使用Jackson对包含未知数量的KV paiirs的JSON对象列表进行Marshall

时间:2017-08-14 05:10:39

标签: java json jackson

假设您有一个json数组,如下所示:

[
  {
    "id" : 1,
    "first_name" : "Jane",
    "last_name" : "Doe"
  },
  {
    "id" : 2,
    "first_name" : "John",
    "middle_name" : "Q",
    "last_name" : "Public",
    "birth_year" : 1971
  },
  {
    "id" : 3,
    "anonymous_user" : true,
    "crm_id" : "abc123"
   },
   {
    "id" : 4,
    "first_name" : "Albert",
    "last_name" : "Einstein",
    "profession" : "Scientist",
    "birth_year" : 1879,
    "e_equals_mc_squared" : true
  }
]

目标是使用杰克逊为POJO编组。我的想法是,我可以有一个类来包含每个K,V对......类似于:

public class myDataObject {
    private String key;
    private T value;

    ...
}

也许是容器类:

public class myDataContainer {
   private ArrayList<myDataObject> dataList;

   ...
}

我的问题变成了使用杰克逊看起来像编组的东西? json没有架构,每个json对象可以有一个未指定数量的K,V对,并且键列表也未指定。

这样的事情有用吗?这甚至是正确的方法吗?

ArrayList<myDataContainer> dataList = mapper.readValue(jsonFile, new TypeReference<ArrayList<myDataContainer>() {}); 

1 个答案:

答案 0 :(得分:1)

你的JSON究竟是什么,是一个地图列表 - 以字符串为键,对象为值。

所以,使用杰克逊,你应该可以做到:

ObjectMapper mapper = new ObjectMapper();
List<Map<String, Object>> data = mapper.readValue(json, new TypeReference<List<Map<String, Object>>>(){});