我收到服务器的回复,其数组包含没有名称的值,只有[tag:tag, tag:tag]
以下是工作示例:
"result": {
"vendors": {
"type": "growing",
"queryString": "fruits[]",
"values": {
"1": "Apple",
"2": "Pear",
"3": "Mango",
"4": "Pineapple",
.....
我如何解析POJO的这个答案?我理解将数组包装到{id:1,name:apple}中很简单,但如果没有它我怎么能用它来管理呢?
答案 0 :(得分:1)
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点。