【问题标题】:Nested JSON parsing with Swift 4.2使用 Swift 4.2 进行嵌套 JSON 解析
【发布时间】:2019-09-09 12:31:53
【问题描述】:

我正在使用SwiftlyJSON 来解析 JSON。我的 JSON 看起来像这样

{
“data”:[{
“id”:123,
“locations”:[{
    “lat”:345,
    “long”:678
},{
    “lat”:345,
    “long”:678
}],
”live”:yes
},{
“id”:123,
“locations”:[{
    “lat”:999,
    “long”:324
},{
    “lat”:865,
    “long”:765
}],
”live”:no
}],
“success”:true,
“status”: 200
}

我想从“位置”中获取每个“纬度”和“经度”,将它们配对并显示在表格单元格中。

我在网络服务中的代码如下所示

private func updateSearchResults(_ data: Data) {
    do {
        let json = try JSON(data: data) //successfully parsed data 
        let locations =  json["data"].arrayValue.map {$0["loactions"].arrayObject}

        print(locations) //locations array is printing out correctly
        for latlang in locations{
          if let lat = latlang["lat"]{
              print(lat) //ERROR here 
          }
        }

    } catch {
        print(error)
    }
}

错误描述:无法使用“String”类型的索引为“[Any]”类型的值下标

现在,我知道我无法通过在索引中提供字符串来访问位置数组的错误,但我不知道如何从 JSON 访问“lat”和“long”。任何帮助将不胜感激

【问题讨论】:

  • 这一行看起来像错字if let lat = latlang["late"]{ 不应该是"lat",去掉e
  • 你得到的错误是什么?
  • 是的,这是一个错字。更正问题并添加错误描述

标签: ios json swift


【解决方案1】:

您需要使用flatMap 创建位置的array(即Dictionary)。然后,访问这些值,

if let locations =  json["data"].arrayValue.flatMap { $0["loactions"].arrayObject } as? [[String: Any]] {
   for latlang in locations {
      print(latlang["lat"])
      print(latlang["long"])
   }
}

建议:停止使用SwiftyJSON。使用 Codable 并使用此 app 生成模型和解析代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多