Reputation: 7370
I want to parse json with Alamofire , in Swift 5 but I didnt get array my codes under below.
My json file
[{"type":"success","data":[{"id":"1","sectionId":"1","title":"test title","detail":"detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text ","image":"test.jpg","view":"0","status":"1"}]}]
My swift 5 codes
if let json = response.result.value {
print(json)
if let dictionaryArray = json as? Dictionary<String, AnyObject?> {
print(dictionaryArray)
let json = dictionaryArray
if let type = json["type"] as? String,
let results = json["data"] as? Array<Dictionary<String, AnyObject?>> {
print(type)
for i in 0..<results.count{
let json = results[i]
if let id = json["id"] as? String, let jokeString = json["title"] as? String{
self.items.append(Item(id: id, sectionId : "0", title: jokeString, detail:"", image: "", view : "0", status : "0"))
print(json)
}
}
}
}
}
}
Any idea? Where have I made a mistake?
Upvotes: 0
Views: 963
Reputation: 100503
The root is an array so its [[String:Any]]
if let dictionaryArray = json as? [[String:Any]] {
Btw its better to use Codable
Alamofire.request(url, method: .get, parameters: [:], encoding: JSONEncoding.default, headers: [:]).responseData { res in
guard let data = res.data else { return }
do {
let res = try JSONDecoder().decode([Root].self, from:data)
print(res)
}
catch {
print(error)
}
}
struct Root: Codable {
let type: String
let data: [Datum]
}
// MARK: - Datum
struct Datum: Codable {
let id, sectionID, title, detail: String
let image, view, status: String
enum CodingKeys: String, CodingKey {
case id
case sectionID = "sectionId"
case title, detail, image, view, status
}
}
Edit:
if let dictionaryArray = json as? [[String:Any?]] {
for item in dictionaryArray {
if let type = item["type"] as? String,let results = item["data"] as? [[String:Any?]] {
print(type)
for json in results {
if let id = json["id"] as? String, let jokeString = json["title"] as? String {
self.items.append(Item(id: id, sectionId : "0", title: jokeString, detail:"", image: "", view : "0", status : "0"))
print(json)
}
}
}
}
}
Upvotes: 2