читать результат JSON как массив словаря

как разобрать результат 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,
    }

как я могу добраться до массива «фотографии»?

Я уже объявляю локальный массив словаря для хранения всех ответов следующим образом:

    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

                }
            }

и он работает

но я не мог добраться до массива «фотографии», пожалуйста, помогите

Всего 2 ответа


@swiftIos предоставил ответ Decodable, который является абсолютно лучшим способом справиться с ситуацией.

Но с вашим текущим вы можете получить доступ к photos из self.myLocalArray :

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

Теперь у вас есть массив для 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)
    }
}

Я дам вам умное решение, которое может быть полезно при каждом попытке превратить 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)

Есть идеи?

10000