我有下面的JSON,我正试图将其读取到JSON节点中,然后映射到Java POJO对象。
{
"operation": "myoperation",
"input": {
"environment": "myEnv",
"stage": "beta"
}
}
以下是POJO级
@JsonIgnoreProperties(ignoreUnknown = true)
public class Input {
private String environment;
private String stage;
public String getEnvironment() {
return apolloEnvironment;
}
public String getStage() {
return stage;
}
}
当我使用下面的映射读取上面的树时,我得到了环境和阶段属性的null
。
Input myInput = OBJECT_MAPPER.treeToValue(inputJson, Input.class);
System.out.println(myInput.getEnvironment()); //returns null
System.out.println(myInput.getStage()); //returns null
我想阅读环境和阶段属性值,如何使用上述逻辑来实现这一点?
JSON中的Input
对象由另一个对象包装。因此,您不需要尝试将整个Tree解析为Input
,而是需要获得映射到属性input
的Value,然后对其进行解析
注意setter应该位于Input
类中
String jsonString = """
{
"operation": "myoperation",
"input": {
"environment": "myEnv",
"stage": "beta"
}
}
""";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString).get("input");
Input myInput = mapper.treeToValue(node, Input.class);
System.out.println(myInput.getEnvironment());
System.out.println(myInput.getStage());
输出:
myEnv
beta
另一种选择是声明另一个类,包装Input
,比方说InputWrapper
。将允许将JSON直接反序列化到InputWrapper
实例中,然后通过getter方法访问嵌套的Input
。
以下是这样的包装器类的样子(为了简洁起见,使用了Lombok的注释):
@Setter
@Getter
public static class InputWrapper {
private String operation;
private Input input;
}
@Setter
@Getter
public static class Input {
private String environment;
private String stage;
}
解析逻辑:
String jsonString = """
{
"operation": "myoperation",
"input": {
"environment": "myEnv",
"stage": "beta"
}
}
""";
ObjectMapper mapper = new ObjectMapper();
InputWrapper inputWrapper = mapper.readValue(jsonString, InputWrapper.class);
Input myInput = inputWrapper.getInput();
System.out.println(myInput.getEnvironment());
System.out.println(myInput.getStage());
输出:
myEnv
beta