如何解析含嵌套对象的JSON数组?用Quicktype生成数据模型
基于给定JSON生成解析模型
给定如下JSON响应数据,需生成对应的解析模型:
{ "code": "0", "message": "Success!", "data": { "firstName": "hello", "lastName": "world", "mobile1": "123456789", "mobile2": "123456789", "cities": [ { "Dubai": [ { "id": 17, "value": "Dubai", "selected": false } ] }, { "Ajman": [ { "id": 29, "value": "Ajman", "selected": false } ] }, { "Fujairah": [ { "id": 30, "value": "Fujairah", "selected": false } ] }, { "Ras Al Khaimah": [ { "id": 31, "value": "Ras Al Khaimah", "selected": false } ] }, { "Um Ul Quwein": [ { "id": 32, "value": "Umm Al Quwein", "selected": false } ] }, { "AbuDhabi": [ { "id": 33, "value": "Al Ain", "selected": false }, { "id": 34, "value": "Abu Dhabi", "selected": false } ] }, { "Sharjah": [ { "id": 35, "value": "Sharjah", "selected": true } ] } ], "picture": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/640px-Image_created_with_a_mobile_phone.png" } }
生成的解析模型(以Java为例)
由于原JSON中cities数组的元素是动态键名的对象,解析时需用Map<String, List<CityOption>>来表示单个城市项:
import com.google.gson.annotations.SerializedName; import java.util.List; import java.util.Map; public class ApiResponse { @SerializedName("code") private String code; @SerializedName("message") private String message; @SerializedName("data") private Data data; // Getters and Setters public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Data getData() { return data; } public void setData(Data data) { this.data = data; } public static class Data { @SerializedName("firstName") private String firstName; @SerializedName("lastName") private String lastName; @SerializedName("mobile1") private String mobile1; @SerializedName("mobile2") private String mobile2; @SerializedName("cities") private List<Map<String, List<CityOption>>> cities; @SerializedName("picture") private String picture; // Getters and Setters public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getMobile1() { return mobile1; } public void setMobile1(String mobile1) { this.mobile1 = mobile1; } public String getMobile2() { return mobile2; } public void setMobile2(String mobile2) { this.mobile2 = mobile2; } public List<Map<String, List<CityOption>>> getCities() { return cities; } public void setCities(List<Map<String, List<CityOption>>> cities) { this.cities = cities; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } } public static class CityOption { @SerializedName("id") private int id; @SerializedName("value") private String value; @SerializedName("selected") private boolean selected; // Getters and Setters public int getId() { return id; } public void setId(int id) { this.id = id; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } } }
说明
cities数组中的每个元素是一个键值对,键为城市名称(如Dubai、Ajman),值为该城市下的选项列表,因此用List<Map<String, List<CityOption>>>来适配这种动态结构。- 模型使用Gson的
SerializedName注解来确保JSON字段与Java类属性的映射,避免因命名规范差异导致解析错误。
内容的提问来源于stack exchange,提问作者Muhammad Farooq Iqbal
相关产品推荐
相关产品推荐

