我正在尝试从JSON响应创建一些数组。我正在使用Alamofire对象映射器。我不确定是否正确映射了对象。

这是我的JSON回应

{
    "status": "success",
    "data": [
        {
            "id": 1,
            "name": "EXERCISE",
            "parent_id": null,
            "children": [
                {
                    "id": 2,
                    "name": "All Exercises",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 3,
                    "name": "Warmup",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 4,
                    "name": "Pliés",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 5,
                    "name": "Tendus (Slow)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 6,
                    "name": "Tendus (Fast)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 7,
                    "name": "Dégagés (Slow)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 8,
                    "name": "Dégagés (Fast)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 9,
                    "name": "Petits Battements",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 10,
                    "name": "Ronds de Jambe",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 11,
                    "name": "Adage",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 12,
                    "name": "Frappés",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 13,
                    "name": "Fondus",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 14,
                    "name": "Grands Battements",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 15,
                    "name": "Rises",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 16,
                    "name": "Stretch",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 17,
                    "name": "Tendus (Centre)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 18,
                    "name": "Adage/PDB (Centre)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 19,
                    "name": "Relevés",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 20,
                    "name": "Pirouettes",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 21,
                    "name": "Petit Allegro",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:47",
                    "updated_at": "2018-08-22 09:03:47"
                },
                {
                    "id": 22,
                    "name": "Medium Allegro",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 23,
                    "name": "Grand Allegro",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 24,
                    "name": "Men’s Allegro",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 25,
                    "name": "Traveling Centre (Odd Bits)",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 26,
                    "name": "Coda",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 27,
                    "name": "Révérence/Cool Down",
                    "parent_id": 1,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                }
            ],
            "created_at": "2018-08-22 09:03:47",
            "updated_at": "2018-08-22 09:03:47"
        },
        {
            "id": 28,
            "name": "LENGTH",
            "parent_id": null,
            "children": [
                {
                    "id": 29,
                    "name": "All Lengths",
                    "parent_id": 28,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 30,
                    "name": "Short (__x4)",
                    "parent_id": 28,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 31,
                    "name": "Medium (__x8)",
                    "parent_id": 28,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 32,
                    "name": "Long (__x16)",
                    "parent_id": 28,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 33,
                    "name": "Marathon (__x32)",
                    "parent_id": 28,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                },
                {
                    "id": 34,
                    "name": "Other",
                    "parent_id": 28,
                    "children": [],
                    "created_at": "2018-08-22 09:03:48",
                    "updated_at": "2018-08-22 09:03:48"
                }
            ],
            "created_at": "2018-08-22 09:03:48",
            "updated_at": "2018-08-22 09:03:48"
        }
    ]
}


这是我的Model类的片段

var Lid: Int?
var Fid: Int?
var Lname: String!
var Fname: String!

public override func mapping(map: Map) {
    super.mapping(map: map)

    Lid   <- map["data.id"]
    Lname <- map["data.name"]
    Fid   <- map["data.children.id"]
    Fname  <- map["data.children.name"]
}


当我调试时-我的模型类的属性为nil。我怎样才能得到这个回应,并最终得到由Lid和Lname组成的数组?

最佳答案

你可以做这样的事情

struct Exercise: Mappable {
    var id: Int?
    var name: String?
    var parent_id: Int?
    var childrens: [Exercise]?

    init?(map: Map) {}
    mutating func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        parent_id <- map["parent_id"]
        childrens <- map["children"]
    }
}


然后像这样映射他们

func mapData(data: [String: Any]) {
    //the data here is the JSON of yours

    guard let exerciseArray = data["data"] as? [[String: Any]] else { return }

    //now we should be able to map array
    let mappedExercises = Mapper<Exercise>().mapArray(JSONArray: exerciseArray)
}


现在,在新版本的swift中,您可以使用Codable协议来处理模型的编码和解码。

10-07 19:39
查看更多