当前位置: 首页 > 知识库问答 >
问题:

杰克逊-从文件中逐个读取不同对象

仰经武
2023-03-14

我有一份这样的文件:

[{
    "messageType": "TYPE_1",
    "someData": "Data"
},
{
    "messageType": "TYPE_2",
    "dataVersion": 2
}]

如您所见,有一个文件包含不同类型的JSON对象。我还有一个能够解析这两种类型的ObjectMapper。我必须一个接一个地读取JSon对象(因为这个文件可能非常大),并为每个对象获取正确的对象(Type1Obj或Type2Obj)。

我的问题是如何用Jackson从文件中逐个读取JSon对象。

共有1个答案

邬浩涆
2023-03-14

您可以将该数组作为通用的Jackson JSON对象来读取,类似于

ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonData);

然后使用遍历数组的所有子级

rootNode#elements()

并使用类似于

if ("TYPE_1".equals(childNode.get("messageType")) {
    Type1Class type1 = objectMapper.treeToValue(childNode, Type1Class.class);
} else // ...
 类似资料:
  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 因此,有一个的实例,其中为空,这正是Jackson返回的内容: 我希望json没有空括号: 这个问题对我没有帮助: null

  • 问题内容: 我可以有条件地使用@JsonUnwrapped吗?我不想在序列化过程中使用它,但想在反序列化对象时使用它。 一种实现方法是创建两个不同的类或创建一个子类,该子类仅覆盖需要在序列化和反序列化时表现不同的属性。这听起来不对。还有其他替代方法或Jackson的解决方法吗? 问题答案: 您可以使用MixIn功能。使用此要素类与注释分离。您可以使用在运行时中添加必要的注释。请参见以下示例: 上面

  • 我正在Jackson中寻找一种方法来允许根据根元素序列化关系。例如,我有一个不是真正的父/子关系。两个实体都可以查询。 JsonBackReference使得序列化为json时没有循环引用。然而,这也导致我不知道公司的地址。如果我是上市公司,那么地址会回来,一切都很好。但如果我列出地址,我希望看到公司被序列化。有没有办法做到这一点?

  • 问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要

  • 我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A