0
votes

Paysage d'objets d'objets à la matrice d'éléments de chaîne dans l'objet Swift JSON

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])!


0 commentaires

3 Réponses :


0
votes

Utilisez Native Swift Type Dictionnaire CODE> partout où vous utilisez NSDictionary code> maintenant

Obtenez une certaine valeur pour la clé en spécifiant la clé de l'indice du dictionnaire P>

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
do {
    let response = try decoder.decode(Response.self, from: data!)
    self.model = response.data
} catch { print(error) }


0 commentaires

0
votes

Je recommanderais de supprimer jsonerialization et d'utiliser protocole codable à la place de codingkeys .

Voici un exemple simple pour voir comment il fonctionne. xxx

plus Documentation ici.


0 commentaires

0
votes

Comme déjà mentionné par d'autres, utilisez (DE) codable code>. Il est facile à utiliser et très confortable. Aucun type de type et aucune touche littérale.

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>

    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()


0 commentaires