使用Swift 4.2进行嵌套JSON解析

时间:2019-09-09 03:45:57

标签: ios json swift

我正在使用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”。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

您需要使用array创建Dictionary个位置(即flatMap)。然后,将值访问为

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生成模型和解析代码。