我想知道如何解析,从Alamofire中获取API的所有数据。
以下是从API下载一个数据字典的代码。我该如何从中下载其他内容?
以下是JSONFormatter的截图:
func downloadJsonData (completed: @escaping DownloadCompleted) {
Alamofire.request(url, method: .get).responseJSON { response in
let result = response.result.value
if let dict = result as? [Dictionary<String,AnyObject>] {
if let id = dict[0]["id"] as? String {
self._id = id
print("@@@\(self._id)")
}
if let name = dict[0]["name"] as? String {
self._name = name
print("@@@\(self._name)")
}
if let avatar = dict[0]["avatar"] as? String {
self._avatar = avatar
print("@@@\(self._avatar)")
}
if let lat = dict[0]["lat"] as? Float {
self._lat = lat
print("@@@\(self._lat)")
}
if let lng = dict[0]["lng"] as? Float {
self._lng = lng
print("@@@\(self._lng)")
}
}
}
completed()
}
答案 0 :(得分:3)
func downloadJsonData (completed: @escaping DownloadCompleted) {
Alamofire.request(url, method: .get).responseJSON { response in
if let collectionData = response.result.value as? [[String:AnyObject]] {
let collection : [YourStruct] = collectionData.flatMap { data in
guard let id = data["id"] as? String,
let name = data["name"] as? String,
let avatar = data["avatar"] as? String,
let lat = data["lat"] as? Float,
let lng = data["lng"] as? Float
else {
return nil
}
return YourStruct(id:id, name:name, avatar:avatar, lat:lat, lng:lng)
}
}
}
completed()
}
现在你有了一个对象的集合。有了它,你可以做你想做的事情
答案 1 :(得分:3)
我真的建议你使用一些Object mapper,因为它使解析变得非常简单。您可以按照以下链接:
JsonJoy非常容易使用
或者您可以在以下链接中查看完整的详细信息:
http://harlankellaway.com/blog/2015/07/05/swift-json-parsing-by-example
否则您可以使用Adrian Bobrowski
答案。
答案 2 :(得分:1)
我建议你实现一个自定义对象的映射,这是一个可以帮助你的库,可以与Alamofire集成。
https://github.com/tristanhimmelman/AlamofireObjectMapper
您可以减少所有样板,并且非常容易实现。
如果您还有其他问题,请告诉我。
答案 3 :(得分:1)
我正在使用这样的Alamofire:
let Header = [ "Authorization" : Token ]
let Parameters = [:]
var json : JSON = nil
Alamofire.request(URLString, method: method, parameters: Parameters, headers : Header)
.responseJSON { response in
switch response.result {
case .success(let data):
json = JSON(data)
print(json)
case .failure(let error):
print("Request failed with error: \(error)")
}
}
}
所以在那之后你可以解析你的json,例如:
if json != nil {
let name = json["name"].stringValue
let avatar = json["avatar"].stringValue
let lng = json["lng"].doubleValue
let lat = json["lat"].doubleValue
}
希望我帮助你,和平