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
相关产品推荐
相关产品推荐

