[英]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.