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

如何在Android中使用Retrofit访问动态嵌套JSON对象内容

如何访问JSON中含动态键的categories内容?

嘿,这问题我熟!当categories里的键(比如food、fashion这类)是动态生成、没法提前写死的时候,核心思路就是绕开固定键名,直接遍历对象的所有键/值,或者根据需求筛选目标内容。下面分几种常用场景给你具体思路和代码示例:

1. 遍历所有动态分类(最通用的解法)

不管新增多少个分类,这种方法都能全覆盖,适合需要处理所有分类内容的场景。

JavaScript示例:

用Object.keys()、Object.values()或Object.entries()来遍历,这三个方法分别获取键名、键值、键值对:

// 假设你的JSON已经解析成了JS对象
const offerData = {
  "offer": {
    "id": "JUN_HAIR_1302177631",
    "categories": {
      "electronics": {"address_1": "12 Mott St", "city": "New York", "zip": "10013"},
      "food": {"address_1": "12 Mott St", "city": "New York", "zip": "10013"},
      "fashion": {"address_1": "12 Mott St", "city": "New York", "zip": "10013"}
    }
  }
};

// 方式1:用Object.entries直接拿到键名和对应数据
for (const [categoryName, categoryInfo] of Object.entries(offerData.offer.categories)) {
  console.log(`当前分类:${categoryName}`);
  console.log(`地址:${categoryInfo.address_1}, ${categoryInfo.city}, ${categoryInfo.zip}`);
}

// 方式2:先拿键名再逐个访问
const categoryKeys = Object.keys(offerData.offer.categories);
categoryKeys.forEach(key => {
  const info = offerData.offer.categories[key];
  // 这里可以做你需要的处理,比如存到数组里、渲染页面等
});

Python示例:

Python字典直接用items()方法遍历键值对:

import json

# 假设你从JSON字符串解析出了字典
offer_data = json.loads('{"offer": {"id": "JUN_HAIR_1302177631", "categories": {"electronics": {"address_1": "12 Mott St", "city": "New York", "zip": "10013"}, "food": {"address_1": "12 Mott St", "city": "New York", "zip": "10013"}, "fashion": {"address_1": "12 Mott St", "city": "New York", "zip": "10013"}}}}')

for category_name, category_info in offer_data['offer']['categories'].items():
    print(f"分类名称:{category_name}")
    print(f"完整地址:{category_info['address_1']}, {category_info['city']} {category_info['zip']}")

2. 按条件筛选动态分类

如果不需要处理所有分类,只想拿到符合特定条件的(比如地址在纽约的分类),可以在遍历的时候加筛选逻辑:

JavaScript示例:

const targetCity = "New York";
// 筛选出所有城市为New York的分类
const filteredCategories = Object.entries(offerData.offer.categories)
  .filter(([key, info]) => info.city === targetCity)
  .map(([key, info]) => ({ category: key, ...info }));

console.log("符合条件的分类:", filteredCategories);

Python示例:

target_city = "New York"
filtered_categories = []
for name, info in offer_data['offer']['categories'].items():
    if info['city'] == target_city:
        filtered_categories.append({"category": name, **info})

print("符合条件的分类:", filtered_categories)

3. 兼容老环境的遍历方式(可选)

如果是在比较老的JS环境中,Object.entries()可能不支持,这时候可以用for...in循环,但记得加hasOwnProperty避免拿到原型链上的属性:

for (const key in offerData.offer.categories) {
  // 确保这个键是categories自身的属性,不是继承来的
  if (offerData.offer.categories.hasOwnProperty(key)) {
    const info = offerData.offer.categories[key];
    // 处理逻辑
  }
}

核心总结

不管用哪种语言,核心逻辑都是不要依赖固定的键名(比如硬写categories.food),而是通过对象/字典的遍历API来动态访问内容。这样哪怕后面新增了travel、sports这类新的动态分类,你的代码也不需要修改就能适配。

内容的提问来源于stack exchange,提问作者Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:39:33