Alamofire无法访问json响应的密钥

时间:2017-06-04 21:32:33

标签: ios json swift swift3 alamofire

我是新手使用Alamofire并遇到了一个问题。我能够运行以下代码来打印API端点的所有数据。

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
    if let JSON = response.result.value {
        print(JSON)
    }
}

问题在于,当我运行时:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
    if let JSON = response.result.value {
        print(JSON["firstkey"])
    }
}

我收到错误:

  

类型'Any'没有下标成员

我不知道为什么会发生这种错误,好像我正在正确访问数据。任何帮助都会很棒,谢谢!

我尝试使用两者进行格式化:

  

print(JSON [“firstkey”] as String)

  

打印(JSON [“firstkey”]为[String:Any]

但他们仍然会犯同样的错误。

这是我的终端上的JSON:

{
    "firstkey":"it worked!",
    "secondkey":["item1", "item2", "item3"]
}

3 个答案:

答案 0 :(得分:1)

这很简单。你只需要强制转换(作为!)你的JSON。所以将你的代码改为这个,它会起作用:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
    if let JSON = response.result.value {
        let json = JSON as! [String: Any]
        print(json["firstkey"])
    }
}

编辑1: 正如您在评论中所说,您使用的是SwiftyJSON包。示例代码如下:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
        if let value = response.result.value {
            let json = JSON(value)
            print(json["firstkey"].stringValue)
        }
    }

Alamofire.request("https://mmcalc.com/api").responseJSON { response in
        if let value = response.result.value {
            let json = JSON(value)
            print(json.arrayValue[0]["uniqueUsers"].stringValue)
        }
    }

答案 1 :(得分:0)

你试图通过获取对象来获取值,试试这个:

virtual

希望它能奏效!

答案 2 :(得分:0)

您应该添加!在)之前的代码末尾,以强制解开值

   Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
      if let JSON = response.result.value {
      let json = JSON as! [String: Any]
      print(json["firstkey"]!)
   }
}