Reputation: 1347
I have a JSON response like:
{
total_count: 155,
size: 75,
authors: [{ name: "test1"
id: 1
},
{name: "test2"
id: 2
}]
}
I created my object model and use objectMapper for mapping/parsing this json.
import Foundation
import SwiftyJSON
import ObjectMapper
class Author: Mappable {
var id: Int!
var name: String!
required init?(map: Map) {
}
func mapping(map: Map) {
self.id <- map["id"]
self.name <- map["name"]
}
static func fromJSONArray(_ json: JSON) -> [Author] {
var authorArray: [Author] = []
if json.count > 0 {
for item in json["authors"]{
print(item)
authorArray.append(Mapper<Author>().map(JSONObject: item)!)
}
}
return authorArray
}
With print(item) I can see the objects but, I can't make append work. It is giving "Unexpectedly found nil while unwrapping an Optional value
" error.
Upvotes: 5
Views: 2206
Reputation: 16416
You have invalid JSON ,
As per your json
authors is dictionary but author dictionary there is no key
As well as inside array there is dictionary but no brackets and comma
Your correct JSON is
authors: [
{
name: "",
id: 0
}
]
And then your code looks ok to me
if json.count > 0 {
for item in json["authors"]{
print(item)
authorArray.append(Mapper<Author>().map(JSONObject: item)!)
}
}
EDIT
Try this out
if json.count > 0 {
for item in json["authors"]{
print(item)
do {
let objectData = try JSONSerialization.data(withJSONObject: item, options: .prettyPrinted)
let string = String(data: objectData, encoding: .utf8)
authorArray.append(Mapper<Author>().map(JSONObject: string)!)
} catch {
print(error)
}
}
}
Upvotes: 0
Reputation: 5588
Your JSON is not valid.
You can check your JSON validity using JSONLint for exemple.
For more safety in your code, avoid usage of !
.
Replace
authorArray.append(Mapper<Author>().map(JSONObject: item)!)
by
if let author = (Mapper<Author>().map(JSONObject: item) {
authorArray.append(author)
} else {
print("Unable to create Object from \(item)")
}
Upvotes: 1