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

如何在Swift中从Pray.zone API提取礼拜时间的数值数据?

如何从Pray.zone API响应中提取礼拜时间数据

我来帮你修改这段代码,让你顺利提取到times字段里的礼拜时间数值。咱们得顺着JSON的嵌套结构一步步解析,同时用可选绑定替代强制解包,避免程序因数据结构异常崩溃。

修改后的完整函数

let urlString = "https://api.pray.zone/v2/times/today.json?city=cairo"
func getDataFromURL() {
    guard let url = URL(string: urlString) else {
        print("无效的URL")
        return
    }
    
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let error = error {
            print("请求错误:\(error.localizedDescription)")
            return
        }
        
        guard let data = data else {
            print("未获取到数据")
            return
        }
        
        do {
            guard let parsedData = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
                print("JSON解析失败")
                return
            }
            
            // 开始逐层解析获取times数据
            guard let results = parsedData["results"] as? [String: Any],
                  let datetimeArray = results["datetime"] as? [[String: Any]],
                  let firstDatetime = datetimeArray.first,
                  let times = firstDatetime["times"] as? [String: String] else {
                print("未找到times数据")
                return
            }
            
            // 按需获取单个礼拜时间
            print("晨礼(Fajr):\(times["Fajr"] ?? "未获取到")")
            print("晌礼(Dhuhr):\(times["Dhuhr"] ?? "未获取到")")
            print("晡礼(Asr):\(times["Asr"] ?? "未获取到")")
            print("昏礼(Maghrib):\(times["Maghrib"] ?? "未获取到")")
            print("宵礼(Isha):\(times["Isha"] ?? "未获取到")")
            
            // 若想一次性打印所有时间,可遍历字典
            print("\n所有礼拜时间:")
            for (prayerName, time) in times {
                print("\(prayerName):\(time)")
            }
            
        } catch let error as NSError {
            print("JSON解析错误:\(error.localizedDescription)")
        }
    }.resume()
}

解析步骤说明

  1. 安全校验前置条件:用guard let替代强制解包,先验证URL有效性、请求数据是否存在,提前拦截错误
  2. 逐层拆解JSON结构:
    • 从顶层字典取出results字段(字典类型)
    • 从results中取出datetime字段(数组类型,API返回的当天数据仅包含一个元素)
    • 取数组第一个元素,再从中取出times字段(字典类型,键为礼拜名称,值为时间字符串)
  3. 灵活获取时间数据:通过键名直接访问times字典的对应值,用??给不存在的键设置默认值,避免出现nil

这样修改后,你就能精准拿到需要的礼拜时间数据啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:49:35