java - 与不同数据类型的键同名的 JSON
问题描述
在一个JSON Object
值中,一个值作为双倍出现,有时作为对象出现,它是API
由配置驱动的,我正在使用该值,但是有什么方法POJO
可以识别数据类型以管理具有不同数据类型的相同键名。
是否可以POJO
水平处理。
{
"total": 56278160
}
或者:
{
"total": {
"val1": 92444080,
"val2": 107372544,
"val3": 113946624
}
}
解决方案
有时当一个字段可以存储JSON Object
和时primitive
,这个原语只是 的“短”表示JSON Object
。例如,只设置了一个字段 -val1
服务只返回它而不用JSON Object
. 在这种情况下,您可以POJO
使用两个构造函数创建一个:一个用于单个构造函数Number
,一个用于所有必填字段。
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JsonPathApp {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
Root rootWithNumber = mapper.readValue("{\"total\": 56278160}", Root.class);
System.out.println(rootWithNumber);
Root rootWithObject = mapper.readValue("{\"total\": {\"val1\": 92444080, \"val2\": 107372544, \"val3\": 113946624}}", Root.class);
System.out.println(rootWithObject);
}
}
class Total {
private final long val1;
private final long val2;
private final long val3;
@JsonCreator
public Total(long value) {
this(value, 0, 0);
}
@JsonCreator
public Total(@JsonProperty("val1") long val1,
@JsonProperty("val2") long val2,
@JsonProperty("val3") long val3) {
this.val1 = val1;
this.val2 = val2;
this.val3 = val3;
}
// getters, toString
}
class Root {
private Total total;
// getters, setters, toString
}
上面的代码打印:
Root{total=Total{val1=56278160, val2=0, val3=0}}
Root{total=Total{val1=92444080, val2=107372544, val3=113946624}}
如果这些表示不相关,您可以使用JsonNode
类型。
class Root {
private JsonNode total;
}
以及后来使用isNumber
和isObject
方法来查找它是否代表primitive
或JSON Object
。
推荐阅读
- google-api - 为 Bitrix24 使用免费的 google api 计划
- python - python-pptx:读取字体颜色
- email - User cannot mail themself via Exchange
- docker - 从 VM 访问 dockerized 服务 (Rundeck)
- node.js - 将 Float32Array 缓冲到客户端
- r - 如何使用 Rblpapi 获取安全描述?
- javascript - RowGroup 内的 AG-Grid 单选
- mysql - 多年来如何为联合表编写通用代码?
- mysql - Mysql查询和重新排序结果
- html - 使用填充在 CSS 中