Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
485 kez görüntülendi
ios development kategorisinde tarafından

Herkese merhaba,

Aşağıda dönen json resultdaki sonuçları altaki fonsiyonda kısmen parse edebiliyorum ama "CustomerList" içerisinde dönen "RegisterNumber " "Title" gibi elemanları ayrıca parse etmenin bir yolumu maalesef bulamadım.

Bu iç içe geçmiş şekilde gelen sonucu nasıl parse edebilirim?

Json result bu şekilde :

{
    "ErrorStatus": null,
    "Result": {
        "CustomerList": [
            {
                "RegisterNumber": "6320036072",
                "Title": "VATAN BİLGİSAYAR SANAYİ VE TİCARET ANONİM ŞİRKETİ",
                "Alias": "urn:mail:defaultpk@vatanbilgisayar.com",
                "Type": "Özel",
                "FirstCreationTime": "2014-01-01T05:35:20",
                "AliasCreationTime": "2014-01-01T05:35:20"
            }
        ],
        "ISEInvoiceCustomer": true
    }
}

xcode daki fonksiyon ise bu şekilde:

func getClientQuery(authorization:String) {

    let url = NSURL(string: URLCustomerCheck+strRegisterNumber)


    let request = NSMutableURLRequest(url: url! as URL)

    request.httpMethod = "GET"

    request.addValue(authorization, forHTTPHeaderField: "Authorization")

    let task = URLSession.shared.dataTask(with: request as URLRequest) { data,response,error in


        if error != nil {
            let alert = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
            let okButton = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
            alert.addAction(okButton)
            self.present(alert, animated: true, completion: nil)
        } else {

            if data != nil {

                do {

                    let jSONResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! Dictionary<String,AnyObject>

                    DispatchQueue.main.async {

                        print(jSONResult)

                        let result = jSONResult["Result"] as! [String:AnyObject]


                        //let customerList = result["CustomerList"] as! [[String:AnyObject]]



                        let ISEInvoiceCustomer = String(describing: result["ISEInvoiceCustomer"])


                        self._lblISEinvoiceCustomer.text = " \(ISEInvoiceCustomer) "

                    }
                } catch {

                }
            }
        }
    }
    task.resume()
}

1 cevap

0 oy
tarafından
tarafından seçilmiş
 
En İyi Cevap

swiftyJson kullanmanı öneririm

tarafından

hocam öncelikle cevabınız için teşekkür ederim. Uygulamaya 3. parti bir ekme yapmadan pratik bi çözüm amaçlayarak swiftyJson'a hiç girmemiştim. SwiftyJson uygulamanın boyutuna ne kadar fazladan etkisi olacaktır? Parse işlemini swiftyJson olmadan yapmanın bir yolu yokmu?

tarafından

nested json formatlarını parse edebilmek için JSONSerialization iç içe birden fazla kullanman gerekiyor.
Son derece hantal ve hata eğilimli. Aldığın verinin tutarlılığından yüzde yüz emin olman gerekli. (Şahsen böyle olsa dahi kullanmam)
Öncelikle SwiftJson çok etkili ve hafif bir library olduğu için öneriyorum. nested json objelerini ve daha ön göremediğin bir çok şeyin önlemini basit bir şekilde almanı sağlıyor. (veri tipleri ve düzgün bir şekilde alınıp alınamamaları gibi mesela)
70 KB'lık boyutunun negatif bir etkisi olmayacaktır, ama kullanıp kullanmamak tabiki tercih meselesidir, bir şey diyemem.

tarafından

siz bu cevabi yazana kadar bende boyutlar ve bu kutuphanenin yeteneklerini biraz daha irdeledim. Dediginiz gibi hocam boyut korkulacak noktalara gelmiyor gelen verilere güveniyorum ancak siz dahi ben bu riski almam dedikten sonra cokta macera aramaya gerek yok sonucta amerika kesfedilmis.

Cevap icin cok tesekkur ederim. SwiftyJson'i entegre ederek yola devam etmek en mantiklisi gibi gorunuyor.

...