【问题标题】:I can't extract NSDictionary values using swift我无法使用 swift 提取 NSDictionary 值
【发布时间】:2015-04-14 05:58:12
【问题描述】:

在我从 json 数据对象中解析出 NSDictionary 对象后,我很难从它中提取值。 ![在此处输入图片说明][1]

var stationsInfo: NSArray = stationsDictionary["stations"]! as NSArray
            for aStation in stationsInfo{
                //parse the information
                var station = aStation as NSDictionary
                println("next")
                var example: NSDictionary = ["key": "val", "key2": "val2", "key3": "val3"]
                var ex: String = example["key2"] as String
                println(station)
                var age_in_days : Double         = station["age_in_days"] as Double
                var hight_normal: Double         = station["height_nom"]  as Double
                var hight_over  : Double         = station["height_ovr"]  as Double
                var latitude: CLLocationDegrees  = station["lat"]         as Double
                var longitude: CLLocationDegrees = station["lon"]         as Double
                var station_id  : Int            = station["station_id"]  as Int

var ex 最终等于“val2”,因为它应该可以工作,但是当我尝试获取存储在站字典中的值时,我不断收到奇怪的错误。

尽管 station 的值如下,但还是会发生这种情况

{ "年龄_in_days" = 1401753600; "height_nom" = "13.5"; "height_ovr" = "14.0"; 纬度 = "24.084082"; lon = "89.023476"; “站号”= 1; }

【问题讨论】:

    标签: json swift nsdictionary


    【解决方案1】:

    您可以尝试将其转换为 Swift 字典。你知道关键和价值是什么吗?如果是这样,请将 AnyObjects 替换为这些类型。无论如何,您都可以尝试 AnyObject,但您可能因此需要进行其他强制转换。

    var station = aStation as [AnyObject:AnyObject]
    

    【讨论】:

    • 类型 'AnyObject' 不符合协议 'Hashable'
    • 当我使用 [String: AnyObject] 时,它也崩溃了。
    • 感谢@Nick,您的回答帮助重定向了我的提问。我找到了实际问题。
    【解决方案2】:

    我发现出了什么问题!

    显然所有的 JSON 值默认都是字符串类型的。

    { "年龄_in_days" = 1401753600; "height_nom" = "13.5"; "height_ovr" = "14.0"; 纬度 = "24.084082"; lon = "89.023476"; “站号”= 1; }

    所以取出双精度值的正确方法是:

    var dataDictionary  = NSJSONSerialization.JSONObjectWithData(dataInput, options: NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary
    
    var stationsInfo: NSArray = stationsDictionary["stations"]! as NSArray
    for station in stationsInfo{
    //parse the information
    var age_in_days : Int            = (station["age_in_days"] as     String).toInt()!
    var hight_normal: Double         = (station["height_nom"] as     NSString).doubleValue
    var hight_over  : Double         = (station["height_ovr"] as     NSString).doubleValue
    var latitude: CLLocationDegrees  = (station["lat"]        as     NSString).doubleValue
    var longitude: CLLocationDegrees = (station["lon"]        as     NSString).doubleValue
    var station_id  : Int            = (station["station_id"] as     String).toInt()!
    

    注意:String 类型不包含 .toDouble( ) 函数,这就是我必须使用 NSString 类型的原因。

    另外,非常重要的注意事项:“age_in_days”和“station_id”这两个键在 JSON 中显示为 int 类型(如上面的引用所示),但 NSJSONSerialization 函数获取所有字符串类型的值!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-01
      • 2016-02-23
      • 1970-01-01
      • 2017-07-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多