读取 JSON 结果作为字典数组

read JSON result as array of dictionary

如何解析以下 JSON 结果

{
        "AddedByName": "jhon",
        "ApproveAction": 0,
        "ApproveActionName": "",
        "photos": null,
        "Status": 0,

    },
    {
        "AddedByName": "mike",
        "ApproveAction": 0,
        "ApproveActionName": "",
        "photos": null,
        "Status": 0,
    },
    {
        "AddedByName": "someone",
        "ApproveAction": 0,
        "ApproveActionName": "",
        "photos": [
            {
                "Id": 53,
                "Serial": 1,
                "Url": "0afe88a3-76e1-4bac-a392-173040936300.jpg"
            }
        ],
        "Status": 0,
    }

如何到达 "photos" 数组?

我已经声明了本地字典数组来保存整个响应,如下所示

    var myLocalArray = [[String:Any]]()

并从 JSON 响应中填充它

                if let Json = response.result.value as? [String:Any] {

                if let ActionData = Json["ActionData"] as? [[String:Any]] {

                    self. myLocalArray = ActionData

                }
            }

并且有效

但我无法连接到 "photos" 阵列,请帮忙

我会为您提供聪明的解决方案,在您尝试将您 Json 转换为有用的数据模型并使其更易于操作时非常有用。 使用 Decodable 的强大功能。 本模特帮你俘获你Json

struct User: Decodable {
    var AddedByName: String
    var ApproveAction: Int
    var ApproveActionName: String
    var photos: [Photo]?
    var Status: Int

    struct Photo: Decodable {
        var Id: Int
        var Serial: Int
        var Url: String
    }
}

现在只需一行就可以让您的 Json 构建数据:

let responseData = try JSONDecoder().decode([User].self, from: jsonD)

@swiftIos 用 Decodable 提供了答案,这绝对是处理这种情况的更好方法。

但是你现在可以从 self.myLocalArray:

访问 photos
if let jsonData = response.result.value as? [String: Any] {
    if let actionData = jsonData["ActionData"] as? [[String:Any]] {
        self.myLocalArray = actionData
    }
}

现在您有了 actionData 的数组,因此通过将特定索引的 actionData 提取为 self.myLocalArray[0] 来访问照片。总计:

let index = 0
if self.myLocalArray.count > index {
    if let photoArrayIndex0 = self.myLocalArray[index]["photos"] as? [[String: Any]] {
        print(photoArrayIndex0)
    }
}