簡體   English   中英

如何使用Android上的Jackson將JSON數組解析為不同的對象?

[英]How do I parse a JSON array into different objects using Jackson on Android?

我正在嘗試在Android上使用Jackson將類似以下的JSON解析為對象(注意:我不受JSON格式的控制-該格式來自Yammer)

"references": [
    {
        "type": "user",
        "id": 12345678,
        "name": "Wex"
    },
    {
        "type": "message",
        "id": 12345679,
        "body":
        {
            "plain":"A short message"
        }
    },
    {
        "type": "thread",
        "id": 12345670,
        "thread_starter_id": 428181699
    }
]

問題在於references中的每個條目都是具有不同屬性的不同類型的對象。 首先,我得到了:

public static class Reference
{
    public String type;
    public String id;
}

我寧願避免將所有潛在屬性放在一個對象中,例如:

public static class Reference
{
    public static class Body
    {
        public String plain;
    }
    public String type;
    public String id;
    public String name;
    public Body body;
    public String thread_starter_id;
}

並希望使用根據type值創建的單獨的類,例如:

public static class ReferenceUser extends Reference
{
    public String name;
}

public static class ReferenceMessage extends Reference
{
    public static class Body
    {
        public String plain;
    }
    public Body body;
}

public static class ReferenceThread extends Reference
{
    public String thread_starter_id;
}

那么...讓Jackson像這樣解析JSON的最佳方法是什么?

我目前正在像這樣簡單地解析它:

ObjectMapper mapper = new ObjectMapper();
Reference[] references = mapper.readValue(json, Reference[].class);

您可以使用Jackson進行以下操作:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.PROPERTY,
    property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(name = "user", value = ReferenceUser.class),
    @JsonSubTypes.Type(name = "message", value = ReferenceMessage.class),
    @JsonSubTypes.Type(name = "thread", value = ReferenceThread.class)
})

public class Reference {
    int id;
    String name;
}

這樣,您將生成子類。

約翰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM