当接口返回的json字段名和实体类的属性名不一致时的处理:
示例json:
public static final String jsonStr = "{\"title\":\"投资交流\",\"isbn-10\":\"032133678X\",\"isbn-13\":\"978-0321336781\",\"authors\":[\"Joshua Bloch\",\"Neal Gafter\"]}";
定义实体类Book:
public class Book {
public String title;
public String isbn1;
public String isbn3;
public String[] author;
// 定义静态内部类-->序列化器
public static class BookDeserializer implements JsonDeserializer<Book> {
@Override
public Book deserialize(JsonElement json, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
Book book = new Book();
JsonObject jsonObject = json.getAsJsonObject();
book.title = jsonObject.get("title").getAsString();
book.isbn1 = jsonObject.get("isbn-10").getAsString();
book.isbn3 = jsonObject.get("isbn-13").getAsString();
JsonArray jsonAuthorsArray = jsonObject.get("authors").getAsJsonArray();
String[] authors = new String[jsonAuthorsArray.size()];
for (int i = 0; i < authors.length; i++) {
authors[i] = jsonAuthorsArray.get(i).getAsString();
}
book.author = authors;
return book;
}
}
}
解析json:
Book book = new GsonBuilder().registerTypeAdapter(Book.class, new Book.BookDeserializer()).create().fromJsonWithNoException(jsonStr, Book.class);