【发布时间】:2020-06-22 15:34:26
【问题描述】:
我正在尝试使用 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 没有被解析。我尝试关注字段类型以从属性文件中获取值(使用弹簧启动),但它没有按预期工作。我不愿意使用alias,纯粹是因为如果任何一个文件的字段名称发生更改,我将不得不更改代码。有人可以帮忙吗
@JsonProperty(@Value("${car.type}")) // Compilation error (It's a spring boot project)
@JsonProperty("${car.type}") // Values not read
【问题讨论】:
-
这不是有效的 JSON:
{color:"yellow", type:"luxurySedan"}。你能检查一下吗?例如,here。 -
更新了我的 JSON
-
如果你有无限的可能性,就没有简单的方法来实现它。可能最简单的方法是使用
@JsonProperty注释声明所有常量字段,对于其余字段,您可以使用Map和@JsonAnySetter注释。看一看:How to use dynamic property names for a Json object