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

Objective-C中如何解析含动态Key的API响应数据?

如何解析带有动态Key的API响应JSON

这种动态Key的JSON解析问题很常见,尤其是在返回日期、ID这类动态标识作为键的API响应里。核心思路是遍历对象的所有动态键,再通过键去获取对应的值数组,下面结合主流编程语言给出具体实现:

JavaScript 实现

// 假设已获取API返回的响应数据
const response = {
  "result": {
    "23-05-2019": [
      { "date": "23-05-2019", "time": "10:00" },
      { "date": "23-05-2019", "time": "12:30" },
      { "date": "23-05-2019", "time": "17:00" }
    ],
    "25-05-2019": [
      { "date": "25-05-2019", "time": "11:00" },
      { "date": "25-05-2019", "time": "09:30" },
      { "date": "25-05-2019", "time": "05:00" }
    ]
  }
};

const result = response.result;

// 方法1:用Object.keys()获取所有动态键后遍历
const dateKeys = Object.keys(result);
dateKeys.forEach(dateKey => {
  const timeEntries = result[dateKey];
  console.log(`日期 ${dateKey} 的时间条目:`);
  timeEntries.forEach(entry => {
    console.log(`- ${entry.date} ${entry.time}`);
  });
});

// 方法2:用Object.entries()直接遍历键值对
for (const [dateKey, timeEntries] of Object.entries(result)) {
  console.log(`\n日期 ${dateKey} 的时间列表:`);
  timeEntries.forEach(entry => console.log(`  ${entry.time}`));
}

Python 实现

# 假设API响应已解析为字典格式
response_json = {
    "result": {
        "23-05-2019": [
            {"date": "23-05-2019", "time": "10:00"},
            {"date": "23-05-2019", "time": "12:30"},
            {"date": "23-05-2019", "time": "17:00"}
        ],
        "25-05-2019": [
            {"date": "25-05-2019", "time": "11:00"},
            {"date": "25-05-2019", "time": "09:30"},
            {"date": "25-05-2019", "time": "05:00"}
        ]
    }
}

result = response_json["result"]

# 方法1:遍历字典的keys()
for date_key in result.keys():
    time_entries = result[date_key]
    print(f"日期 {date_key} 的时间条目:")
    for entry in time_entries:
        print(f"- {entry['date']} {entry['time']}")

# 方法2:遍历字典的items()直接获取键值对
for date_key, time_entries in result.items():
    print(f"\n日期 {date_key} 的时间列表:")
    for entry in time_entries:
        print(f"  {entry['time']}")

Java 实现(使用Jackson库)

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

public class DynamicKeyParser {
    public static void main(String[] args) throws IOException {
        String apiResponse = "{\"result\":{\"23-05-2019\":[{\"date\":\"23-05-2019\",\"time\":\"10:00\"},{\"date\":\"23-05-2019\",\"time\":\"12:30\"},{\"date\":\"23-05-2019\",\"time\":\"17:00\"}],\"25-05-2019\":[{\"date\":\"25-05-2019\",\"time\":\"11:00\"},{\"date\":\"25-05-2019\",\"time\":\"09:30\"},{\"date\":\"25-05-2019\",\"time\":\"05:00\"}]}}";

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode rootNode = objectMapper.readTree(apiResponse);
        JsonNode resultNode = rootNode.get("result");

        // 遍历所有动态键值对
        Iterator<Map.Entry<String, JsonNode>> fieldIterator = resultNode.fields();
        while (fieldIterator.hasNext()) {
            Map.Entry<String, JsonNode> entry = fieldIterator.next();
            String dateKey = entry.getKey();
            JsonNode timeEntries = entry.getValue();

            System.out.println("日期 " + dateKey + " 的时间条目:");
            for (JsonNode entryNode : timeEntries) {
                String date = entryNode.get("date").asText();
                String time = entryNode.get("time").asText();
                System.out.println("- " + date + " " + time);
            }
        }
    }
}

核心总结

不管使用哪种编程语言,处理这类动态Key的核心逻辑都是:

  • 获取动态键的集合(或直接遍历键值对)
  • 逐个访问每个键对应的数组数据
  • 根据业务需求进一步处理数组里的每个对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:03:59