Как сохранить ответ JSON в переменную? - PullRequest
0 голосов
/ 24 мая 2019

Я получаю JSON ответ от API. Мне нужно хранить в переменной с использованием модели, как я могу хранить?

struct StructLogin {
    var status:String?
    var contentarr = [content]()
}
struct content {
    var AuthoToken:String?
    var user_name:String?
    var user_type:String?
}

let jsonResponse = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
StructLoginObj.status = jsonResponse!["status"] as? String
StructLoginObj.contentarr = contentArray

contentObj.AuthoToken = jsonResponse!["auth_token"] as? String
contentObj.user_name = jsonResponse!["user_name"] as? String
contentObj.user_type = jsonResponse!["user_type"] as? String

{"status": "200", "content": {"user_type": "1", "user_name": "Super Admin", "auth_token": "7500b440c0f8035e864e1541c650b888"}}

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Используйте Codable для анализа вашего JSON ответа на объект.

struct Login: Codable {
    var status: String?
    var content:Content?

}
struct Content: Codable {
    var auth_token:String?
    var user_name:String?
    var user_type:String?
}

Давайте рассмотрим пример ответа JSON, предоставленного вами.

let str = """
{"status":"200","content":{"user_type":"1","user_name":"Super Admin","auth_token":"7500b440c0f8035e864e1541c650b888"}}
"""

Поскольку у нас нет фактического Data из API, мы будем преобразовывать str в data для анализа.

if let data = str.data(using: .utf8) {
    let login = try? JSONDecoder().decode(Login.self, from: data)
    print(login)
}
1 голос
/ 24 мая 2019

Вам нужно использовать Codable для простого преобразования объекта в данные, также ваш content ключ - это словарь, а не массив

Сохранить:

let decoder = JSONDecoder() 
decoder.keyDecodingStrategy = .convertFromSnakeCase
let res = try! decoder.decode(Root.self, from: data)  
print(res.content)
let data = try! JSONEncoder().encode(res.content)
// save data anywhere e.x userDefaults if it's a settings 

 UserDefaults.shared.set(data,forKey:"User")

Прочитано:

if let data = UserDefaults.shared.data(forKey:"User") {
  print(data)
}

struct Root: Codable {
    let status: String
    let content: Content
} 
struct Content: Codable {
    let userType, userName, authToken: String 
}
0 голосов
/ 24 мая 2019

Вы можете использовать метод JSON.parse() для преобразования API возвращаемого значения в JavaScript объект:

let result = JSON.parse(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...