gpt4 book ai didi

java - Jackson Json特性

转载 作者:行者123 更新时间:2023-12-01 18:01:12 24 4
gpt4 key购买 nike

我正在尝试使用 jackson @JsonProperty 解析 json 文件。我手头有一个有趣的问题。标记为 @JsonProperty 的字段名称之一可以根据输入源而有所不同。下面的示例 json 文件

car1.json --> {"car": {"color": "yellow","type": "luxurySedan"}}
car2.json --> {"car": {"color": "yellow","modeltype": "SUV"}}

我的数据模型类似于

@Data
class Car {

@JsonProperty("color")
private String color;

@JsonProperty("type")
private String type; // Don't want to use alias to solve above problem

}

第二个文件 car2.json 未得到解析。我尝试按照字段类型从属性文件中获取值(使用 Spring Boot),但它没有按预期工作。我不愿意使用 alias 纯粹是因为如果任何一个文件的字段名称发生更改,我将不得不更改代码。有人可以帮忙吗

@JsonProperty(@Value("${car.type}")) // Compilation error (It's a spring boot project)
@JsonProperty("${car.type}") // Values not read

最佳答案

您的 JSON 似乎没有 car 节点,因此您无法将其用作 @JsonProperty 注释的一部分。一般来说,您只需要指定单个节点名称而不是完整路径,因为它们是相对于根节点进行评估的。在有嵌套 JSON 结构的地方,通常将它们封装在单独的类中,因此您仍然不需要放入完整路径。

class Car {

@JsonProperty("color")
private String color;

@JsonProperty("type")
private String type;

@JsonProperty("modeltype")
private String modelType;

// The rest of the class
}

应该可以解决您提供的 JSON 问题。如果源 JSON 中缺少某个属性,那么在 Java 对象中其值将仅为 null

您的第二个 JSON 示例失败,因为 Jackson 尝试将 JSON 解码到的 Java 对象未声明名为 "modeltype" 的属性,并且默认行为是在未知属性上失败。可以通过添加以下类级注释来抑制该特定行为:

@JsonIgnoreProperties(ignoreUnknown = true)

但是,这将导致 Jackson 完全忽略没有映射字段的任何属性,因此您将丢失与未知属性关联的任何数据。

关于java - Jackson Json特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60622678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com