2017-01-12 50 views
0

我有與具有相同屬性的名稱的多個條目的JSON文件,但不同的屬性值,諸如:映射JSON具有多個條目的陣列

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

,它應該被映射的類是:

公共類人{

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

<getter, setters etc> 

}

編輯: 服務代碼是:

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從HTTP實體,並與正確的格式解析,現在我加入了答案建議註釋屁股。正如你所看到的,它們有一些共同的特性,但在其他方面有所不同,我想映射這些共同的領域。這樣可以映射JSON嗎?我已經嘗試將JSON映射到JsonNodes的集合/列表/數組,但是我一直在關注反序列化,而僅映射JSON條目的一個實例工作得很好。有沒有另外一種方法呢?

回答

1

使用

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

或者,如果你正在使用Lombok那麼這將是

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

我不想忽略全班,只有特定的領域。但是那些不屬於班級的屬性呢,比如'noOfChildren'或'married'呢? – borgmater

+1

這些屬性將被忽略,只有名稱和性別會在您的對象中。 –

1

使用

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

而反序列化JSON到POJO類。

您提供的JSON會給出以下錯誤,因爲它不是有效的。

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

有效的JSON會是這樣的:

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

它適用於JSON的一個實例,但是如果我在POJO數組中存儲了多個條目,則會得到如下所示的結果:'無法反序列化出現START_OBJECT標記的java.util.ArrayList實例嗎? – borgmater

+0

您能告訴我樣本代碼和JSON,你正在嘗試? –

+0

請在您的問題中添加示例json和代碼 –