2017-01-12 4 views
0

ich eine JSON-Datei mit mehreren Einträgen haben, die gleichen Attributnamen, aber unterschiedliche Attributwerte, wie zum Beispiel:Mapping JSON mit mehreren Einträgen in ein Array

{ 
    "name" : { "first" : "A", "last" : "B" }, 
    "gender" : "MALE", 
    "married" : false, 
    "noOfChildren" : 2 
}, 
{ 
    "name" : { "first" : "C", "last" : "D" }, 
    "gender" : "FEMALE", 
    "married" : true, 
    "noOfChildren" : 1 
} 

Die Klasse, es ist abgebildet werden soll:

public class Mensch {

private Name name; 
private String gender; 
private int age; 

<getter, setters etc> 

}

EDIT: Servicecode ist:

List<Human> humans = null; 
ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

try { 

    humans= objectMapper.readValue(json, new TypeReference<List<Human>>(){}); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

JSON von HTTP-Einheit analysiert und mit dem richtigen Format und jetzt habe ich die Anmerkung ass in den Antworten vorgeschlagen.

Wie Sie sehen können, haben sie einige Attribute gemeinsam, unterscheiden sich aber in anderen, und ich möchte diese gemeinsamen Felder zuordnen. Ist es möglich, den JSON auf diese Weise abzubilden? Ich habe versucht, JSON zu einer Sammlung/Liste/einem Array von JsonNodes zuzuordnen, aber ich bekomme immer wieder Fehler bei der Deserialisierung, während das Mappen nur einer Instanz des JSON-Eintrags gut funktioniert. Gibt es eine andere Möglichkeit, dies zu tun?

Antwort

1

Verwenden

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Human { 
    private Name name; 
    private String gender; 
    // getters, settets, default constructor 
} 

Oder wenn Sie Lombok verwenden, dann wird es

@Data 
@NoArgsConstructor 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Human { 
    private Name name; 
    private String gender; 
} 
+0

Ich will nicht die ganze Klasse ignorieren, nur bestimmte Felder. Aber was ist mit den Attributen, die nicht in der Klasse enthalten sind, wie 'noOfChildren' oder' verheiratet'? – borgmater

+1

Diese Attribute werden ignoriert, nur Name und Geschlecht sind in Ihrem Objekt enthalten. –

1

Verwendung

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

sein, während json zu POJO Klasse Deserialisieren.

Der JSON, den Sie in Frage gestellt haben, wird folgenden Fehler geben, da es kein gültiger ist.

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token 

Valid Json würde so aussehen:

[ 
    { 
    "name": { 
     "first": "A", 
     "last": "B" 
    }, 
    "gender": "MALE", 
    "married": false, 
    "noOfChildren": 2 
    }, 
    { 
    "name": { 
     "first": "C", 
     "last": "D" 
    }, 
    "gender": "FEMALE", 
    "married": true, 
    "noOfChildren": 1 
    } 
] 
+0

Es funktioniert für eine Instanz von JSON, aber wenn ich mehrere Einträge in einem Array von POJOs speichern, bekomme ich etwas wie folgt: 'Kann Instanz von java.util.ArrayList aus START_OBJECT Token nicht deserialisieren ' – borgmater

+0

können Sie mir Probe zeigen Code und JSON, die Sie versuchen? –

+0

Fügen Sie bitte Probe Json und Code in Ihre Frage –

Verwandte Themen