使用Jackson读取JSON标量作为单元素double []

时间:2015-07-02 13:25:38

标签: java json jackson

说我有以下两个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?

1 个答案:

答案 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的最新版本。