ios - 从 JSON 响应创建字符串数组 Alamofire

标签 ios json swift alamofire objectmapper

我正在尝试从 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"
        }
    ]
}

这是我的模型类的片段

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"]
}

当我调试时 - 我的模型类的属性为零。我怎样才能得到这个响应并最终得到 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 协议(protocol)来处理模型的编码和解码。

关于ios - 从 JSON 响应创建字符串数组 Alamofire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975075/

相关文章:

php - 使用 Codeigniter 的数据库响应中的 "Nested"数组

ios - Google Image API - 加载 tbUrl

ios - 在 Swift 中通过多个委托(delegate)链接 UIButton 点击

ios - 如何将一个 UITableView 链接到另一个 UITableView

javascript - jQuery 列表过滤

ios - Epos打印机iOS SDK

ios - 在 Swift 中更改 MKMapView 上的图钉图像

javascript - React-Native 更新 ListView 数据源

ios - 禁用AppStore Connect中的可用国家/地区后,对用户的副作用是什么

c# - 如何使用 Monotouch.Dialog 设置背景图片