java - 让 Jackson 将单个 JSON 对象解释为包含一个元素的数组

标签 java json jackson

有没有一种方法可以让 Jackson 将单个 JSON 对象解释为具有一个元素的数组,反之亦然?

示例,我有 2 种略有不同的 JSON 格式,我需要将两者映射到同一个 Java 对象:

格式A(包含一个元素的 JSON 数组):

points : [ {
    date : 2013-05-11
    value : 123
}]

格式B(JSON对象,是的,我知道它看起来“错误”,但这就是我得到的):

points : {
    date : 2013-05-11
    value : 123
}

以上两者都应转换为的目标 Java 对象:

//Data.java 
public List<Point> points;
//other members omitted

//Point.java
class Point {
    public String date;
    public int value;
}

目前,只有A能够正确解析数据。我想避免直接篡改 JSON 本身。 Jackson 中是否有一些配置我可以篡改以使其接受 B

最佳答案

尝试使用 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY - 它应该适合你。

示例:

final String json = "{\"date\" : \"2013-05-11\",\"value\" : 123}";

final ObjectMapper mapper = new ObjectMapper()
        .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
final List<Point> points = mapper.readValue(json,
        new TypeReference<List<Point>>() {});

关于java - 让 Jackson 将单个 JSON 对象解释为包含一个元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59027906/

相关文章:

jquery - 在 ASP.NET MVC 中将对象列表转换为 Json

python - 从 lambda 函数检索 cloudformation 堆栈名称

java - 如何使用 Jackson JSON 将 JSON 字符串转换为 Map<String, String>

java - 为什么 session.createCriteria(classtype).list() 返回的对象比列表中的对象多?

即使实现了可序列化,也会抛出 java.io.NotSerializedException

json - 如何在 swift 中保存响应 JSON 数组并使用用户默认值进行检索

java - 从 Hibernate 反序列化 JSON

java - 带列表字段的 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

java - (a * b)/c MulDiv 和处理中间乘法溢出

java - 通过按钮更改按钮的 onClick() 方法