【问题标题】:Could not cast value of type 'Swift.Array<Swift.Dictionary<Swift.String, Swift.String>>' () to 'Swift.Dictionary<Swift.String, Any>' ()无法将 'Swift.Array<Swift.Dictionary<Swift.String, Swift.String>>' () 类型的值转换为 'Swift.Dictionary<Swift.String, Any>' ()
【发布时间】:2018-11-19 03:55:06
【问题描述】:

这是我的 JSON,当我读取 ord 、 uniq 数据时出现错误

let response2 : [String: Any]  = ["Response":["status":"SUCCESS","error_code":"0","message":"SUCCESS","Array":[
                                ["ord":"50","uniq":"5a66c2348",
                                   "name":"SHREE","no":"UP11AT0","loc":"Hathin","lat":"23.33","lon":"87.09","date":"30-01-2018","time":"12:35:33","dis_dt":"00-00-0000","dis_tm":"00:00:00"],
                                ["ord":"50","uniq":"5a66c2348",
                                   "name":"SHREE","no":"UP11AT0","loc":"Hathin","lat":"23.33","lon":"87.09","date":"30-01-2018","time":"12:35:33","dis_dt":"00-00-0000","dis_tm":"00:00:00"],
                                ["ord":"50","uniq":"5a66c2348",
                                   "name":"SHREE","no":"UP11AT0","loc":"Hathin","lat":"23.33","lon":"87.09","date":"30-01-2018","time":"12:35:33","dis_dt":"00-00-0000","dis_tm":"00:00:00"]
                            ]],"count":"35"]

我的代码是

let status = "\((response2["Response"]! as! [String: Any])["status"]!)"
print(status)

if status == "SUCCESS" {
   let count = ((response2["Response"]! as! [String: Any])["Array"] as AnyObject).count!
   print(count)
   let ar = (response2["Response"]! as! [String: Any])["Array"]!
   print(ar)

   var ord_id: [Any] = []
   for i in 0..<count {
       ord_id.append((response2["Response"]! as! [String: Any])["Array"]! [0] as! [String:Any])// Here I'm getting Type 'Any' has no subscript members and 
   }

} else {
   print("Show alert")
}

当这样写时,我收到错误:Type 'Any' has no subscript members

let ar = (response2["Response"]! as! [String: Any])["Array"]! [0] as! [String: Any]          

当我这样写时,错误:无法将“Swift.Array>”(0x10bf341f0)类型的值转换为“Swift.Dictionary”(0x10bf340d0)。

let ar = (response2["Response"]! as! [String: Any])["Array"]! as! [String: Any]

我无法理解确切的问题是什么以及如何解决它。

【问题讨论】:

    标签: ios json swift post nsdictionary


    【解决方案1】:

    解析可以通过,也可以使用Decodable将JSON解析成对象。

    let response = response2["Response"]! as! [String: Any]
    let status = response["status"]!
    
    if let array = response["Array"] as? Array<Dictionary<String, Any>> {
         print(array.count)   
         let ordArray = array.map { $0["ord"] }
         let unique = Array(Set(ordArray)) //Do if needs to stripe duplicates
         let uniqArray = array.map { $0["uniq"] }
         print(ordArray)
         print(uniqArray)
    }
    

    【讨论】:

    • 谢谢,如何阅读“ord”和“uniq”对象。你能解释一下吗...我想将 ord 和 uniq 保存在数组中
    • 如果您需要最小化代码,可以使用我的代码。您可以使用array.map。我的代码更新了
    【解决方案2】:

    要获得计数,您需要做...

    if let res = response2["Response"] as? [String: Any], let arr = res["Array"] as? [[String: Any]] {
      print("array count = \(arr.count)")
    } else {
       print("Array not found !!")
    }
    

    从“响应”键中获取数组...

    var ord_id: [Any] = []
    
    if let res = response2["Response"] as? [String: Any] {
        if let arr = res["Array"] as? [Any], arr.count > 0 {
          print(arr)
          ord_id = arr
        }
    }
    

    编辑:

    要获取“old”和“uniq”键值,需要通过一个数组,获取需要的对象。

    var ordId_arr = [String]()
    var uniq_arr = [String]()
    
    for obj in ord_id {
    
     print(obj)
    
     if let dict = obj as? [String: Any] {
        //print(dict["ord"] as! String)
        //print(dict["uniq"] as! String)
        //print(dict["name"] as! String)
       //you can get other values in same way
    
       if let ord = dict["ord"] as? String {
            ordId_arr.append(ord)
        }
    
        if let uniq = dict["uniq"] as? String {
            uniq_arr.append(uniq)
        }
     }
    
    }
    
    print("\(ordId_arr)")
    print("\(uniq_arr)")
    

    【讨论】:

    • 致命错误:在展开可选值时意外发现 nil
    • 它正在打印空数组 [ ] [ ]
    • 好的,非常感谢,我会再试一次,你能发布一些链接来从 JSON 中读取对象
    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多