2015-07-02 22 views
6

Dire che ho i seguenti due file JSONLeggi JSON scalare come elemento singolo doppio [] utilizzando Jackson

{ 
    "a": [1, 2] 
} 

e

{ 
    "a": 1 
} 

voglio usare Jackson deserializzare entrambi in un oggetto della forma seguente -

public class Foo { 
    public double[] a; 
} 

così finirebbe con due oggetti, Foo{a=[1,2]} e Foo{a=[1]}. È possibile persuadere Jackson a deserializzare uno scalare 1 in un doppio array [1], preferibilmente usando l'API di jackson-databind?

risposta

5

Sì, è possibile.

Utilizzando l'idioma ObjectMapper#.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);.

autonomo esempio qui:

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; 
} 

uscita

[2.0] 
[3.0, 4.0, 5.0] 

nota rapida

sulla versione di Jackson richiesto. La documentazione per ACCEPT_SINGLE_VALUE_AS_ARRAY dicono:

Si noti che le caratteristiche che non indicano la versione di inclusione erano disponibili a Jackson 2.0 (o precedente); solo le aggiunte successive indicano la versione di inclusione.

La funzione non ha l'annotazione javadoc @since, quindi dovrebbe funzionare nelle versioni più recenti di Jackson.

+0

Funziona perfettamente, grazie. –

+0

@ChrisTaylor sei il benvenuto. – Mena

Problemi correlati