J'essaie d'analyser l'objet JSON reçu du service Web qui donne le résultat en tant qu'objet JSON de statut et de données.Data est une gamme d'objets, à partir de cet objet, je souhaite prendre un élément sur la base de laquelle je doivent remplir une vue de table.
Les résultats du service Web sont livrés comme p>
class ABC: NSObject {
var service_name:String?
var service_id : Int?
init(service_name:String,service_id:Int) {
self.service_name = service_name
self.service_id = service_id
}
let myUrl = URL(string: "services.php");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil
{
print("error=\(String(describing: error))")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = json
{
let status=parseJSON["status"] as? Int
let newdata : NSDictionary = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
self.model=(newdata.value(forKey: "data") as? [ABC])!
3 Réponses :
Utilisez Native Swift Type Obtenez une certaine valeur pour la clé en spécifiant la clé de l'indice du dictionnaire P> Dictionnaire CODE> partout où vous utilisez NSDictionary code> maintenant let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
do {
let response = try decoder.decode(Response.self, from: data!)
self.model = response.data
} catch { print(error) }
Je recommanderais de supprimer Voici un exemple simple pour voir comment il fonctionne. p> jsonerialization code> et d'utiliser protocole codable code> à la place de codingkeys code>.
Comme déjà mentionné par d'autres, utilisez Créer deux structures, déclarez les membres sous forme de constantes non optionnelles avec les noms em> camelased em> et omettez l'initialisateur. P> (DE) codable code>. Il est facile à utiliser et très confortable. Aucun type de type et aucune touche littérale. let myUrl = URL(string: "services.php")
var request = URLRequest(url: myUrl!)
request.httpMethod = "POST"// Compose a query string
let task = URLSession.shared.dataTask(with: request) { data, _, error in
if let error = error { print(error); return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let json = try decoder.decode(Root.self, from: data!)
let status = json.status
let newdata = json.data
} catch { print(error))
}
task.resume()