2017-12-18 8 views
-2

Ich bin total neu zu Networking und Parsing Ich verbringe 2 gerade Tage versuchen, herauszufinden, wie ich die Elemente aus dieser API anzeigen kann http://api.alquran.cloud/quran/en.asad Zum Beispiel brauche ich alle Namen oder ein Objekt aus der API, die ich habe 0 Wissen und ich versucht, das Internet für eine Lösung surfen ich für meinen Fall finden kann nicht er ist mein Code:JSON Parsing mit Swift 4

struct Result: Codable { 
    var number: [String:Int] 
    var text: [String:String] 
} 

struct Surahs: Codable { 
var data: Surah 

}

struct Surah: Codable { 
var surahs: [SurahItem] 

}

struct SurahItem: Codable { 
var number: Int? 
var text: String? 

}

enum CodingKey:String, Swift.CodingKey { 
case name = "name" 
case text = "text" 
case number = "number" 

}

import UIKit 
    class afasyVC: UIViewController { 

func jsonDecoding() { 
    let jsonUrlString = "http://api.alquran.cloud/quran/en.asad" 

    guard let url = URL(string: jsonUrlString) else {return} 
    URLSession.shared.dataTask(with: url) { (data, response, err) in 
     guard let data = data else {return} 
     do { 
      let quraanJsonStuff = try JSONDecoder().decode(SurahItem.self, from: data) 
      for numbers in [quraanJsonStuff] { 
       print(quraanJsonStuff) 
      } 
      } catch let jsonErr { 
      print("Error serializing json", jsonErr) 
     } 
     }.resume() 
} 
+0

Hallo, willkommen in SO. Bitte beschreiben Sie die Schritte, die Sie unternommen haben, um Ihren Code zu debuggen und genau, wo die Probleme liegen – Spangen

+0

Danke, wenn ich mit Dingen herumspiele, gibt es mir "Kein Wert mit Schlüsselnummer (\" Nummer \ ").", BasicingError: nil)) und manchmal erwartet der Decoder, ein Array zu decodieren, aber das Wörterbuch wurde gefunden. – shehab

Antwort

1

Die JSONDecoder in Swift 4 transformiert die JSON Auflistungstypen wie folgt:

  • A JSON Wörterbuch {} zu einer Swift struct/class.
  • Ein JSON-Array [] zu einem Swift-Array.

Gemäß der JSON die Struktur ist

struct Root: Codable { 
    let code: Int 
    let status: String 
    let data : Surah 
} 

struct Surah: Codable { 
    let surahs: [SurahItem] 
} 

struct SurahItem: Codable { 
    let number: Int 
    let name: String 
    let englishName : String 
    // ... and so on 
} 

Im Wurzelobjekt ein Wörterbuch für die Schlüssel data ist, die für die Schlüssel surahs


Das Array enthält die dekodieren und ausdrucken SurahItem Array schreiben

let root = try JSONDecoder().decode(Root.self, from: data) 
for surah in root.data.surahs { 
    print(surah.number, surah.name, surah.englishName) 
} 
+0

Funktioniert perfekt THX viel! – shehab