You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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对象中,必须逐层访问嵌套节点:

  1. 从根对象提取CatalogList节点(JsonObject类型)
  2. 从CatalogList中提取Items节点(JsonArray类型)
  3. 遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:15