我想处理一个JSON字符串,该字符串作为使用 Alamofire 进行的HTTP调用的数据返回。
但是我想稍微“更低级别”,并了解如何将响应对象转换为字典。
推理是,它认为字典可能是一种简单/简单的方法来访问响应中的JSON值(而不必经历将响应转换为JSON对象的过程)。
这是假设JSON对象和字典是相同的(是吗?)。
这是我写的示例函数:
func question() -> Void{
let response : DataRequest = Alamofire.request("http://aapiurl", parameters: nil)
// Working with JSON Apple developer guide:
// https://developer.apple.com/swift/blog/?id=37
response.responseJSON { response in
if let JSON = response.result.value
{
print("JSON: \(JSON)") // Works!
let data = JSON as! NSMutableDictionary
// Casting fails
// Could not cast value of type '__NSCFArray' (0x19f952150) to 'NSMutableDictionary' (0x19f9523f8).
print("Data: \(data)")
}
}
}
修改
JSON对象似乎是Any类型,并且没有以下答案中建议的任何方法。
我试图将其转换为字典并得到以下错误:
答案 0 :(得分:0)
JSON
对象 IS 一个词典(或者可能是顶层的数组)。
请注意,您不应在Swift中使用NSMutableDictionary
或NSDictionary
(或NSArray
或NSMutableArray
)。
此外,JSON对象不是工作对象。 JSON是一种移动数据的方法。它不能用作数据源。
如果您想编辑从JSON获得的信息,那么您应该从该JSON构造适当的数据对象并使用它们。
如果您需要从这些新数据发送JSON,那么您将获取数据对象并将其转换回字典和数组(即JSON对象)并发送该数据。
答案 1 :(得分:0)
Alamofire的结果值为Any
,因为它通常是数组或字典。在Swift中,您通常不应该使用NS *类,而应使用本地swift类型,例如Array
和Dictionary
。
您可以(应该)使用选项来查看返回的JSON对象:
if let array = response.result.value as? [Any] {
print("Got an array with \(array.count) objects")
}
else if let dictionary = response.result.value as? [AnyHashable: Any] {
print("Got a dictionary: \(dictionary)")
}
...
根据您对后端的期望,您可以将每个案例视为成功或失败。
答案 2 :(得分:-1)
Alamofire.request(myUrl)
.responseJSON {
response in
if let dict = response.result.value as? [String : Any] {
debugPrint(dict)
wishLists.removeAll() //[[String:Any]]
let lists = dict["wishlists"] as! [String: Any]
debugPrint(lists)
for (key, value) in lists {
var list = value as! [String: Any]
wishLists.append(list)
}
debugPrint(wishLists)
self.tableView.reloadData()
}
}