читать результат JSON как массив словаря - PullRequest
0 голосов
/ 24 октября 2018

как разобрать следующий результат 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", пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

@ 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для конкретного индекса как self.myLocalArray[0].В целом:

let index = 0
if self.myLocalArray.count > index {
    if let photoArrayIndex0 = self.myLocalArray[index]["photos"] as? [[String: Any]] {
        print(photoArrayIndex0)
    }
}
0 голосов
/ 24 октября 2018

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