java - 如何使用 Jackson 编码包含未知数量 KV 对的 JSON 对象列表

标签 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
  }
]

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

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

    ...
}

也许还有一个容器类:

public class myDataContainer {
   private ArrayList<myDataObject> dataList;

   ...
}

我的问题是使用 Jackson 进行编码是什么样的? json 没有模式,每个 json 对象可以有未指定数量的 K,V 对,并且键列表也未指定。

这样的东西有用吗?这是正确的方法吗?

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

最佳答案

JSON 的真正含义是一个映射列表 - 以字符串作为键,以对象作为值。

因此,使用 Jackson,您应该能够执行以下操作:

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

关于java - 如何使用 Jackson 编码包含未知数量 KV 对的 JSON 对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45667783/

相关文章:

java - 在数组列表上选择 vector 遗留类

javascript - 在我的网站中显示来自 MongoLab 的数据

java - 枚举的反序列化不起作用 - Jackson

java - Spring RestTemplate jackson 获取特定字段

Java - 小程序中的 java.lang.UnsupportedClassVersionError

java - 使用父类和子类声明新对象的方法之一的结果

java - Spring/JTA/JPA 单元测试 : Rollback not working

json - ExcelJS 节点 : is there a method/module for converting xlsx to json in exceljs

javascript - 在 ejs 部分中迭代 JSON 对象

Java - Jackson 注释来处理没有合适的构造函数