Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Arrays 使用Swift 4.2创建JSON数组_Arrays_Json_Swift_Parsing_Swift4.2 - Fatal编程技术网

Arrays 使用Swift 4.2创建JSON数组

Arrays 使用Swift 4.2创建JSON数组,arrays,json,swift,parsing,swift4.2,Arrays,Json,Swift,Parsing,Swift4.2,我无法从URL获取json数据 我尝试了Alamofire、Swiftyjson和JSONDecoder,但没有得到任何数据 这是我的json url结果 { “Firmalar”:{ “Firma”:[ { “SicilNo”:“382”, “FirmaAdi”:“AYSAN PAMUK YAĞVE YEM SANAYİTİCARET ANONİMŞİ市场”, “Sektor”:“GIDAÜRÜNLERİMALATI”, “AcikAdres”:“Acidereoosb MahalesİFUZ

我无法从URL获取json数据

我尝试了Alamofire、Swiftyjson和JSONDecoder,但没有得到任何数据

这是我的json url结果

{
“Firmalar”:{
“Firma”:[
{
“SicilNo”:“382”,
“FirmaAdi”:“AYSAN PAMUK YAĞVE YEM SANAYİTİCARET ANONİMŞİ市场”,
“Sektor”:“GIDAÜRÜNLERİMALATI”,
“AcikAdres”:“Acidereoosb MahalesİFUZULİCADDESİNO:2”,
“电话号码”:(322)394-5029“,
“FaksNo:”(322)394-4929“,
“EPosta”:“mahmutkulak。aysanas@gmail.com",
“WebAdresi”:“www.aysanpamuk.com”,
“WebDurumu”:“1”,
“TanitimFilmTR”:“第,
“TanitimFilmEN”:“,
“Tanitimbrosurt”:“,
“TanitimBrosurEN”:”
},      {
“SicilNo”:“1127”,
“FirmaAdi”:“EKOVAR GERİDÖNÜNÜM MAKİNAİNŞAAT SAN.VE TİC.LTD.ŞTİ”,
“Sektor”:“DİERİMALATLAR”,
“AcikAdres”:“Acidereoosb MahalesİCUMHURİYET BULVARI NO:26”,
“TelefonNo:”(312)442-1305“,
“FaksNo:”(312)442-1306“,
“EPosta”:mesut@ekovar.com.tr",
“WebAdresi”:“www.ekovar.com.tr”,
“WebDurumu”:“1”,
“TanitimFilmTR”:“第,
“TanitimFilmEN”:“,
“Tanitimbrosurt”:“,
“TanitimBrosurEN”:”
}
]
}
}
这是我的结构

struct Firmalar: Codable {
    let Firma: [FirmaModel]?
}

struct FirmaModel: Codable{
    let SicilNo:String?
    let FirmaAdi:String?
    let Sektor:String?
    let AcikAdres:String?
    let TelefonNo:String?
    let FaksNo:String?
    let EPosta:String?
    let WebAdresi:String?
    let TanitimFilmTR:String?
    let TanitimBrosurTR:String?

    enum CodingKeys: String, CodingKey {
        case SicilNo="SicilNo", FirmaAdi="FirmaAdi", Sektor="Sektor", AcikAdres="AcikAdres", TelefonNo="TelefonNo", FaksNo="FaksNo", EPosta="EPosta", WebAdresi="WebAdresi", TanitimFilmTR="TanitimFilmTR", TanitimBrosurTR="TanitimBrosurTR"
    }
}
这是我的数据代码

 var firmalar = [Firmalar]()
    let searchController = UISearchController()

    override func viewDidLoad() {
        super.viewDidLoad()

        fetchFirmaData()
    }

    func fetchFirmaData(){
        let url = URL(string: "http://mobileapi.adanaorganize.org.tr/v1/firmalar")
        guard let downloadURL = url else {return}
        URLSession.shared.dataTask(with: downloadURL) { (data, response, error) in
            do{
                if error == nil {
                    self.firmalar = try JSONDecoder().decode([Firmalar].self, from: data!)
                    DispatchQueue.main.async {
                        print(self.firmalar)
                        self.tableView.reloadData()
                    }
                }
            } catch {
                print("Error While Geting Json Data: " + error.localizedDescription)
            }
            }.resume()
    }

所以我的问题是如何创建数组。使用swift。这是我的swift密码。我遇到了这个错误:无法读取数据,因为它的格式不正确。

首先,决不打印
错误。localizedDescription
,它返回一个通用的毫无意义的错误消息。始终只打印
错误

真正的错误是

应解码数组,但找到了字典

错误很明显。看看JSON。根对象是一个字典,key
Firma
的值是您要查找的数组

您必须为根对象添加另一个结构并对其进行解码

struct Root: Codable {
    let firmalar: Firmalar

    private enum CodingKeys: String, CodingKey { case firmalar = "Firmalar" }
}

struct Firmalar: Codable {
    let firma: [FirmaModel]

    private enum CodingKeys: String, CodingKey { case firma = "Firma" }
}

struct FirmaModel: Codable { ...
声明数据源数组

var firmaModel = [FirmaModel]()
并解码JSON

if error == nil {
    let result = try JSONDecoder().decode(Root.self, from: data!)
    self.firmaModel = result.firmalar.firma

将所有结构成员声明为非可选,并使用由
编码键映射的小写成员,就像在我建议的结构中一样。

您没有
Firmalar
数组,但只有一个值,并且该值本身需要是单独根级结构的一部分,因此请更改

self.firmalar = try JSONDecoder().decode([Firmalar].self, from: data!)

当然,您需要将
firmalar
的声明更改为

var firmalar = [FirmaModel]()
并包括根级结构

struct Response: Decodable {
    let Firmalar: Firmalar
}

谢谢你的支持。正如你所说,我已经编辑了我的代码,但我得到了一个错误;self.firmaModel=firmalar.Firma!线程8:致命错误:在展开可选值时意外发现nil谢谢您的支持。正如你所说,我已经编辑了我的代码,但我得到了一个错误;self.firmalar=result.Firma!线程8:致命错误:在展开可选线程时意外发现nilvalue@EmreŞekeroğlu抱歉,我显然无法保存我的更新版,现在已修复。
struct Response: Decodable {
    let Firmalar: Firmalar
}