2017-12-18 313 views
-2

我完全陌生的網絡和解析我花了2連日試圖弄清楚如何我可以顯示這個API的項目http://api.alquran.cloud/quran/en.asad 例如,我需要所有的名稱或任何對象從我有0知識和我嘗試上網衝浪的解決方案我無法找到我的情況下,他是我的代碼:JSON解析使用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

嗨,歡迎來到SO。請描述你調試代碼的步驟,以及問題的確切位置 – Spangen

+0

Thankyou,當我播放與它給我的東西的周圍時「沒有與鍵號(\」number \「)相關聯的值。」,underlyingError:nil) ),有時解碼器希望解碼一個數組,但字典被發現。 – shehab

回答

1

在夫特4 JSONDecoder變換JSON集合類型如下:

  • 甲JSON字典{}到夫特結構/類。
  • 一個JSON數組[]到一個Swift數組。

根據該JSON結構是

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 
} 

在根對象有一個字典鍵data其中包含密鑰surahs


陣列爲了解碼和打印SurahItem數組寫入

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

作品完美THX很多! – shehab