Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift 4进行JSON解析_Json_Parsing_Swift4 - Fatal编程技术网

使用Swift 4进行JSON解析

使用Swift 4进行JSON解析,json,parsing,swift4,Json,Parsing,Swift4,我对网络和解析一无所知。我已经连续两天试图弄清楚如何显示此文件中的项目。例如,我需要api中的所有名称或任何对象,但我一无所知,我尝试在互联网上寻找我无法找到的解决方案。这是我的密码: struct Result: Codable { var number: [String:Int] var text: [String:String] } struct Surahs: Codable { var data: Surah } struct Surah: Codable

我对网络和解析一无所知。我已经连续两天试图弄清楚如何显示此文件中的项目。例如,我需要api中的所有名称或任何对象,但我一无所知,我尝试在互联网上寻找我无法找到的解决方案。这是我的密码:

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

Swift 4中的
JSONDecoder
将JSON集合类型转换如下:

  • 将JSON字典
    {}
    转换为Swift结构/类
  • 将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
}
在根对象中,有一个key
data
字典,其中包含key
surahs


解码并打印
SurahItem
数组写入

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

嗨,欢迎来到苏。请描述您调试代码所采取的步骤,以及问题的具体位置。谢谢您,当我玩arround时,它给我的东西“没有与键号(\“number\”)相关的值,underlineError:nil”),有时解码器希望解码数组,但找到了字典。非常好用!