簡體   English   中英

使用 Gson/Retrofit 解析具有非命名值的數組

[英]Parse array with non named values with Gson/Retrofit

我有一個來自服務器的響應,其中包含一個數組,該數組包含沒有名稱的值,只是像[tag:tag, tag:tag]

這是工作示例:

 "result": {
        "vendors": {
            "type": "growing",
            "queryString": "fruits[]",
            "values": {
                "1": "Apple",
                "2": "Pear",
                "3": "Mango",
                "4": "Pineapple",
.....

如何解析 POJO 的這個答案? 我知道將數組包裝到 {id:1, name:apple} 中很容易,但是沒有它我如何管理?

1)如果您可以讓服務器更改該序列化格式,請讓他們這樣做。 它是粗略的。

2)如果你不能改變服務器格式,你可以實現一個自定義的TypeAdapter 這是一個自定義適配器,它只讀取值,丟棄名稱/索引,然后添加到列表中。

public class VerboseArrayTypeAdapter extends TypeAdapter<List<String>> {

    @Override
    public void write(JsonWriter out, List<String> value) throws IOException {
        // Hopefully you don't need to serialize in this format, too!
    }

    @Override
    public List<String> read(JsonReader in) throws IOException {
        List<String> elements = new ArrayList<String>();
        in.beginObject();
        while (in.peek() != JsonToken.END_OBJECT) {
            in.nextName();
            elements.add(in.nextString());
        }
        in.endObject();
        return elements;
    }
}

如下注釋您的供應商類(注意,我沒有顯示您擁有的包裝類)-

public class Vendors {
    String type;
    String queryString;
    @JsonAdapter(VerboseArrayTypeAdapter.class)
    List<String> values;
}

注意這里有幾個警告——我們忽略了 JSON 中的索引。 因此,要么 a) 您需要確保服務器始終按順序序列化元素,要么 b) 您不關心順序。

3) 見第 1 點。

暫無
暫無

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

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