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

Swift4如何从本地JSON文件提取坐标值并存储到数组

从GeoJSON FeatureCollection提取所有coordinates到数组(Swift)

你已经成功解析了JSON并拿到了features数组,这一步很棒!接下来只需要遍历每个Feature,逐层取出geometry里的coordinates,然后收集到一个新数组里就可以了。我帮你调整了代码,还加入了安全处理避免崩溃:

具体步骤:

  • 遍历features数组中的每个Feature元素
  • 从每个Feature中取出geometry字典(用可选绑定替代强制解包,防止JSON结构异常导致崩溃)
  • 从geometry中取出coordinates数组
  • 将所有有效的coordinates添加到目标数组中

修改后的完整代码:

// 用来存储所有坐标的二维数组,每个元素是[经度, 纬度]
var coordinatesArray: [[Double]] = []

if let path = Bundle.main.path(forResource: "json", ofType: "json"),
   let jsonData = NSData(contentsOfFile: path) as Data? {
    do {
        guard let parsedData = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any],
              let features = parsedData["features"] as? [[String: Any]] else {
            print("JSON解析失败或结构不符合预期")
            return
        }
        
        // 遍历每个Feature
        for feature in features {
            // 逐层取出geometry和coordinates,做安全校验
            guard let geometry = feature["geometry"] as? [String: Any],
                  let coordinates = geometry["coordinates"] as? [Double] else {
                // 如果某个Feature的结构不对,直接跳过,不影响其他数据
                continue
            }
            coordinatesArray.append(coordinates)
        }
        
        // 输出结果
        print("提取到的所有坐标:\(coordinatesArray)")
    } catch {
        print("解析JSON时出错:\(error.localizedDescription)")
    }
} else {
    print("无法读取本地JSON文件")
}

额外说明:

从你的输出结果来看,coordinates里的数值是带引号的字符串类型,不是直接的数字。如果是这种情况,需要把代码里的类型转换调整一下,把字符串转成Double:

// 处理字符串类型的坐标
for feature in features {
    guard let geometry = feature["geometry"] as? [String: Any],
          let coordStrings = geometry["coordinates"] as? [String],
          // 把字符串转成Double,过滤掉转换失败的情况
          let coordinates = coordStrings.compactMap({ Double($0) }) else {
        continue
    }
    coordinatesArray.append(coordinates)
}

为什么不用强制解包?因为如果JSON里某个Feature缺少geometry或者coordinates,强制解包会导致App崩溃,用guard let或者if let做安全校验能让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:41:47