说我有以下两个JSON文件
{
"a": [1, 2]
}
和
{
"a": 1
}
我想用Jackson将它们反序列化为以下形式的对象 -
public class Foo {
public double[] a;
}
所以我最终会得到两个对象Foo{a=[1,2]}
和Foo{a=[1]}
。是否有可能说服杰克逊将标量1
反序列化为双数组[1]
,最好使用jackson-databind api?
答案 0 :(得分:5)
是的,你可以。
使用ObjectMapper#.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
成语。
这里有一个独立的例子:
package test;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main( String[] args ) throws Exception {
ObjectMapper om = new ObjectMapper();
// configuring as specified
om.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
// scalar example
String json = "{\"foo\":2}";
// array example
String otherJson = "{\"foo\":[3,4,5]}";
// de-serializing scalar and printing value
Main m = om.readValue(json, Main.class);
System.out.println(Arrays.toString(m.foo));
// de-serializing array and printing value
Main otherM = om.readValue(otherJson, Main.class);
System.out.println(Arrays.toString(otherM.foo));
}
@JsonProperty(value="foo")
protected double[] foo;
}
<强>输出强>
[2.0]
[3.0, 4.0, 5.0]
快速记录
需要关于杰克逊的版本。 ACCEPT_SINGLE_VALUE_AS_ARRAY
的文档说:
请注意,这些功能并不表示包含的版本 可以在Jackson 2.0(或更早版本)中找到;只是后来添加 表明包含的版本。
该功能没有@since
javadoc注释,因此它应该适用于Jackson的最新版本。