【问题标题】:Swift get values from JSONSwift 从 JSON 中获取值
【发布时间】:2017-02-01 04:37:51
【问题描述】:

我正在尝试使用以下代码解析下面的 JSON 响应,但似乎无法使其工作,我该怎么做?我正在尝试获取图像中的“user_guid”和所有“entity_guid”。

斯威夫特

        do {
            var entity_guid : Int = 0
            var user_guid : Int = 0
            let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary

            // Parse JSON data
            let jsonP = jsonResult?["result"] as! [AnyObject]
            for jsonL in jsonP {
                user_guid = jsonL["user_guid"] as! Int
                entity_guid = jsonL["entity_guid"] as! Int
            }


        } catch {

        }

JSON

{
 "status":0,
 "result":{
  "user_guid":139219,
  "images":[
   {
    "entity_guid":572356
   },
   {
    "entity_guid":572354
   },
   {
    "entity_guid":572352
   }
]
}
}

【问题讨论】:

  • result 是一个对象(字典),而不是一个数组。
  • 1.为什么使用NSDictionary? 2. 为什么所有的崩溃操作员(!)? 3. 为什么user_guid 的值只有一个,而且与entity_guid 的值不在同一个数组中,为什么还要在循环中获取?
  • ... 3. 为什么是AnyObject? 4. 为什么.mutableContainers ;-)

标签: ios json swift swift3


【解决方案1】:

试试下面的代码:

do {
        var entity_guid : Int = 0
        var user_guid : Int = 0
        let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String:Any]

        // Parse JSON data
        let jsonP = jsonResult?["result"] as! [String:Any]
        user_guid = jsonP["user_guid"] as! Int
        let images = jsonP["images"] as! [[String:Int]]
        for jsonL in images {
            entity_guid = jsonL["entity_guid"]!
        }
    } catch {
        print(error.localizedDescription)
    }

【讨论】:

  • 你为什么在 Swift 3 中使用 NSDictionary
  • ... 为什么在 Swift 3 中使用 AnyObject?这是Any
  • @vadian,Any 可以表示任何类型的实例,包括函数类型。 AnyObject 可以表示任何类类型的实例。 AnyObject 在 Swift3 中没有被弃用。我知道它绝对是一个类类型的对象,我为什么要使用“Any”并稍后将其转换为一个对象。所以我用 AnyObject 而不是 Any
  • JSON 支持的所有类型都是 Swift 中的专有结构,因此 Any,请参阅 Swift Blog: Working with JSON in Swift
  • @vadian,感谢您对我的教育。我已经更新了代码。顺便说一句,你也可以修改代码。
【解决方案2】:

替换下面的代码并尝试检查。您必须尽可能使用Swift 数据类型。

do {
    var entity_guid : Int = 0
    var user_guid : Int = 0
    let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any]

     guard let jsonP = jsonResult["result"] as [String: Any] else {
     return
    }
     user_guid = jsonP["user_guid"] as! Int
     if let jsonArr = jsonP["images"] as? [String] {
        for image in jsonArr {
            entity_guid = image["entity_guid"] as! Int
         }
}

【讨论】:

  • jsonArr 的数据类型有误。它需要是字典数组,而不是字符串数组。查看 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多