【问题标题】:Parse JSON data with Swift, AlamoFire and SwiftyJSON使用 Swift、AlamoFire 和 SwiftyJSON 解析 JSON 数据
【发布时间】:2018-11-12 00:15:08
【问题描述】:

作为一个 Swift 新手,我对如何解析从 API 获得的一些 JSON 数据感到非常困惑。我可以使用 alamofire 请求从 api 获取 JSON 数据。在这一点上,我想我有一个 NSDictionary 对象,JSON 作为 print(JSON) 日志来控制大量 JSON。

if let result = response.result.value {
                            let JSON = result as! NSDictionary
                           print("this is what JSON is")
                            print(JSON)

我的问题是,首先,JSON 实际上是一个 NSDictionary。其次,我将如何访问 JSON 中的值。我是否需要先将其转换为数据对象。或者我如何获取嵌套数据。

例如,假设 JSON 如下所示:

 {
   "contact": {
   "first": "Bob",
   "second":"Jones"
    }
 }

我在 SO 上遇到了这段代码:

 let data = JSON(data: JSON)
 print("data\(data["contact"]["first"])")

但它会引发错误。我安装了 swiftyJSON,但很高兴有或没有它的解决方案。

提前感谢您的任何建议

【问题讨论】:

标签: ios json swift swifty-json


【解决方案1】:

你可以试试

if let result = response.result.value as? [String:Any] {
   if let contact = result["contact"] as? [String:Any] {
      if let first = contact["first"] as?  String {
           print(first)
     }
   }
}

还有这个

let data = JSON(data: JSON)

给出错误,因为参数的类型应该是Data 而不是Dictionary

我希望从 Alamofire 请求中返回数据并使用Decodable 对其进行解析并转换为所需的模型

【讨论】:

  • 我没有可解码,因为我有旧版本的 Xcode,因此 swift 3。您的方法是使用 swiftyJSON 还是仅使用 swift。
【解决方案2】:

试试这个!

     if let data = response.data {
            let jsonData = JSON(data: data)
            print("data : \(jsonData["contact"]["first"].string)")
        }

【讨论】:

    【解决方案3】:

    Swift4 引入了惊人的 Codable 协议。

    使用 Codable,我们可以通过编写很少的代码行将 JSONObject 或 PropertyList 文件建模为等效的结构或类。

    有很多在线工具可以从你的 JSON 中创建模型类 (http://www.json4swift.com/)

    例子

      let decoder = JSONDecoder()
      let parsedObject = try decoder.decode(Class.self, from: data) 
    

    您可以在以下链接中找到详细信息: https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 2017-05-31
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多