2017-12-18 312 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