【问题标题】:Working With Json in swift 3在 swift 3 中使用 Json
【发布时间】:2016-12-26 08:51:01
【问题描述】:

我想从此 JSON 文件中获取 long_name,我可以使用以下代码访问“结果”:

    let url = URL(string: "https://maps.googleapis.com/maps/api/geocode/json?latlng=35.7229513,51.3566039&language=fa&key=AIzaSyBXOPT1jEYizWZHOKLwv4dhacgYTcmn3I4")!

    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

        if error != nil {

            print(error!)

        }
        else{

            if let urlcontent = data {

                do{
                    let jsonResult = try JSONSerialization.jsonObject(with: urlcontent, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]

                print(jsonResult["results"]!)
                    if let jsonResult = jsonResult["results"] as? [String: Any] {
                        if let address_components = jsonResult["address_components"] as? [String: Any] {
                            print(address_components)
                            if let long_name = address_components["long_name"] as? [String: Any] {
                                    print(long_name)
                            }
                        }
                    }

            }
            catch{
                print("json failed")
            }

        }
        }
    }
    task.resume()

但我只是得到结果,这是我的 JSON 文件: https://maps.googleapis.com/maps/api/geocode/json?latlng=35.7339859%2C51.3393980&sensor=true_or_false&language=fa

【问题讨论】:

  • 你能捕捉到错误 (catch let error),打印出错误并将其添加到问题中吗?

标签: arrays json swift xcode swift3


【解决方案1】:

您的结果键包含Array 作为值而不是Dictionary,因此只需将[String:Any] 更改为[[String:Any]],然后从resultsArray 的每个字典对象中访问address_components,现在address_components 也是字典数组和long_name 在那个字典里面。所以试试这样。

if let resultsArray = jsonResult["results"] as? [[String: Any]] {
     for dic in resultsArray {
         if let addressArray = dic["address_components"] as? [[String:Any]] {
              for address in addressArray {
                   if let longName = address["long_name"] as? String {
                        print(longName)
                   }
              }
         }
     }
}

【讨论】:

  • 对不起,我是 swift 的新手,请您为我编写完整的代码以获取地址组件的 long_name 吗?提前致谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
相关资源
最近更新 更多