如何使用Gson库从嵌套JSON中获取ModelUrl字段
问题:使用Gson获取嵌套在JSON数组中的ModelUrl字段
我用Gson库解析JSON文件,想获取ModelUrl字段,但这个字段嵌套在CatalogList节点下的Items数组里,直接调用jsonObject.get("ModelUrl")只返回null。
JSON数据示例
{ "CatalogList": { "Items": [ { "HasCampaignBanners": false, "ModelId": 6280454, "ModelUrl": "/tr-TR/TR/urun/LC-WAIKIKI/kadin/Tunik/6280454/2747034", "DefaultOptionImageUrl": "https://img-lcwaikiki.mncdn.com/mnresize/600/-/pim/productimages/20222/6280454/v1/l_20222-w2ic27z8-r3e-78-61-93-174_a.jpg", "OptionImageUrlList": [ "https://img-lcwaikiki.mncdn.com/mnresize/600/-/pim/productimages/20222/6280454/v1/l_20222-w2ic27z8-r3e-78-61-93-174_a.jpg", "https://img-lcwaikiki.mncdn.com/mnresize/600/-/pim/productimages/20222/6280454/v1/l_20222-w2ic27z8-r3e-78-61-93-174_a1.jpg", "https://img-lcwaikiki.mncdn.com/mnresize/600/-/pim/productimages/20222/6280454/v1/l_20222-w2ic27z8-r3e-78-61-93-174_a2.jpg" ] } ] } }
我编写的基础代码
JsonElement jsonElement = JsonParser.parseString(data); JsonObject jsonObject = jsonElement.getAsJsonObject(); System.out.println(jsonObject.get("ModelUrl"));
请问如何遍历JSON结构或通过正确路径获取指定的ModelUrl字段?
解决方法
方法1:逐层手动解析JSON结构
ModelUrl不在根JSON对象中,必须逐层访问嵌套节点:
- 从根对象提取
CatalogList节点(JsonObject类型) - 从
CatalogList中提取Items节点(JsonArray类型) - 遍历
Items数组,从每个元素(JsonObject)中读取ModelUrl
代码实现:
JsonElement jsonElement = JsonParser.parseString(data); JsonObject rootObject = jsonElement.getAsJsonObject(); // 获取CatalogList对象 JsonObject catalogList = rootObject.getAsJsonObject("CatalogList"); // 获取Items数组 JsonArray itemsArray = catalogList.getAsJsonArray("Items"); // 遍历数组获取每个Item的ModelUrl for (JsonElement itemElement : itemsArray) { JsonObject itemObject = itemElement.getAsJsonObject(); // 提前判断字段是否存在,避免空指针异常 if (itemObject.has("ModelUrl")) { String modelUrl = itemObject.get("ModelUrl").getAsString(); System.out.println("ModelUrl: " + modelUrl); } }
方法2:映射为Java实体类(推荐)
如果JSON结构固定,创建对应实体类后用Gson反序列化,代码更简洁易维护:
定义实体类
public class CatalogResponse { private CatalogList CatalogList; public CatalogList getCatalogList() { return CatalogList; } public static class CatalogList { private List<Item> Items; public List<Item> getItems() { return Items; } } public static class Item { private String ModelUrl; public String getModelUrl() { return ModelUrl; } } }
反序列化并获取字段
Gson gson = new Gson(); CatalogResponse response = gson.fromJson(data, CatalogResponse.class); // 遍历Items获取所有ModelUrl for (CatalogResponse.Item item : response.getCatalogList().getItems()) { System.out.println("ModelUrl: " + item.getModelUrl()); }
内容的提问来源于stack exchange,提问作者Seçkin Kurtalan
相关产品推荐
相关产品推荐

