Swift 4 JSON декодировать с массивом верхнего уровня - PullRequest
0 голосов
/ 29 августа 2018

При получении данных JSON из моего API я не могу заставить их правильно декодироваться.

[ 
{ 
"success": "true",
 "message": "testtt" 
} 
]

Вот так выглядит мой вывод API.

Как мы видим, мой PHP выводит значения в виде массива верхнего уровня.

Как я могу прочитать эту информацию в Swift 4?

let json = try JSONDecoder().decode([API].self, from: data)

возвращается:

success: "true", сообщение: "testtt"

Вот как выглядит структура:

struct API: Decodable{
    let success: String
    let message: String

    init(jsont: [String: Any]){
        success = jsont["success"] as? String ?? ""
        message = jsont["message"] as? String ?? ""
    }
}

Но тогда я не знаю, как дальше считывать эти данные.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Если вы хотите получить доступ, создайте еще одну структуру, такую ​​как

struct data: Decodable{
let API: [API]
}

Тогда в вашей программе вы должны декодировать, как показано ниже

let json = try JSONDecoder().decode(data.self, from: data)

и доступ к ним

data.API[i].success
data.API[i].message
0 голосов
/ 30 августа 2018

Нет необходимости создавать собственный инициализатор. Вы просто используете тип массива [API].self при декодировании вашего json:

struct API: Decodable{
    let success: String
    let message: String
}

let dataJSON = Data("""
[
    {
        "success": "true",
        "message": "testtt"
    }
]
""".utf8)

do {
    if let result = try JSONDecoder().decode([API].self, from: dataJSON).first {
        print(result.success)
        print(result.message)
    }
} catch {
    print(error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...