ios - ValueForKeyPath() 返回一些意想不到的东西

标签 ios json swift nsdictionary

我正在解析这个 json:

{
"destination_addresses" : [ "Göteborg, Sverige" ],
"origin_addresses" : [ "Stockholm, Sverige" ],
"rows" : [
   {
      "elements" : [
         {
            "distance" : {
               "text" : "467 km",
               "value" : 466568
            },
            "duration" : {
               "text" : "4 timmar 34 min",
               "value" : 16468
            },
            "status" : "OK"
         }
      ]
   }
],
"status" : "OK"
}

像这样进入 NSDictionary:

let dataDict = NSJSONSerialization.JSONObjectWithData(data.dataUsingEncoding(NSUTF8StringEncoding), options: nil, error: nil) as NSDictionary

let distance = dataDict.valueForKeyPath("rows.elements.distance.value")

现在,一切正常,没有崩溃或错误。但是,我希望它返回 466568 但它返回的是:

(
        (
        466568
    )
)

我不知道为什么,我不能使用它,也不能将它转换成任何东西:(

还有另一个问题与此类似,但那里的答案对我没有帮助,因为我不是更改 json 的人,Google 才是。所以请不要讨厌。

最佳答案

valueForKeyPath 返回一个嵌套的 NSArray。你可能想投两次:

let distanceValue = ((distance as NSArray).objectAtIndex(0) as NSArray).objectAtIndex(0) as NSNumber
// or
let distanceValue = (distance as [NSArray])[0][0] as NSNumber

不能直接访问 distance 值,因为 valueForKeyPath 没有实现数组项的选择器。

没有valueForKeyPath:

let rows = dataDict.objectForKey("rows") as [NSDictionary]
let elements = rows[0]["elements"] as [NSDictionary]
let distance = elements[0]["distance"] as NSDictionary
let value = distance["value"] as NSNumber

关于ios - ValueForKeyPath() 返回一些意想不到的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183011/

相关文章:

iOS/C : Convert "integer" into four character string

javascript - 尝试访问 json 列表时显示文本 'Undefined'

javascript - 将 evt.data 从 websocket 转换为 jSON 字符串或 Javascript 中的纯字符串

swift - 可以做 "if\(var1) = 0"吗?

ios - 自 iOS 13 起,MKPolyline 替换导致 MKTileOverlay 在 map 上闪烁

ios - 我希望将导航栏中的栏按钮项放置在导航栏的最角落

ios - 在 UITableView 上嵌入 UISearchController 时出现奇怪的白条

python - 从 pandas 数据帧生成自定义 JSON 格式输出

ios - 我需要在 Nib 之间使用自定义转场

swift - 可选枚举初始值设定项不适用于 where 子句