Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
json序列化和获取值存在问题_Json_Swift_Serialization - Fatal编程技术网

json序列化和获取值存在问题

json序列化和获取值存在问题,json,swift,serialization,Json,Swift,Serialization,我有JSON格式的数据,我想从如下结构中获取数据-我想获取时间值,在本例中是字符串:“04:35:00”,并将所有这些时间值附加到我的小时模型中 { "result": [ { "values": [ { "value":"null", "key":"symbol_2" }, { "value":"nul

我有JSON格式的数据,我想从如下结构中获取数据-我想获取时间值,在本例中是字符串:“04:35:00”,并将所有这些时间值附加到我的小时模型中

{
"result": [
    {
        "values": [
            {
                "value":"null",
                "key":"symbol_2"

            },
            {
                "value":"null",
                "key":"symbol_1"},
            {
                "value":"016",
                "key":"company"

            },
            {
                "value":"QUW12DO",
                "key":"direction"

            },
            {
                "value":"TD-4WYS",
                "key":"road"

            },
            {
                "value":"04:35:00",
                "key":"time"

}]},
//通过这样的代码:

URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in



        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {

            print(jsonObj!.value(forKey: "result")!)

            if let stopsArray = jsonObj!.value(forKey: "result") as? NSArray {

                    for stop in stopsArray{


                        if let stopDict = stop as? NSDictionary {


                            let hours = stopDict.value(forKey: "time")

                            let myModel = Hours(hours: hours as? String)
                            self.list.append(myModel)
                            print("LIST: \(self.list)")

                            DispatchQueue.main.async {
                                self.actInd.stopAnimating()
                                self.actInd.isHidden = true
                                self.containerLittle.isHidden = true
                                self.loadingView.isHidden = true
                            }
                        }
                    }

            }
        }
    }).resume()

在这一刻,当我将代码附加到模型中时,到处都是nill。如何获取模型的时间值?

JSON的结构更加复杂。JSON是包含字典数组的字典数组。请尝试以下代码:


    typealias JSONDict = Dictionary<String, Any>
    typealias JSONArray = Array<Any>

    if let result = jsonObj?["result"] as? JSONArray {
        for case let value as JSONDict in result {
            if let values = value["values"] as? JSONArray {
                for case let value as [String : String] in values {
                    if let timeString = value["value"], value["key"] == "time" {
                        // Create your Hours model
                        print(timeString)

                        // Use break only if you have single "time" member in "values" array
                        //break
                    }
                }

                // Use break only if you have single "values" member in "result" array
                //break
            }
        }
    }


typealias JSONDict=字典
typealias JSONArray=数组
如果let result=jsonObj?[“result”]as?杰索纳雷{
对于case let,结果中的值为JSONDict{
如果let values=value[“values”]as?JSONArray{
对于大小写,让值作为值中的[String:String]{
如果let timeString=value[“value”],value[“key”]=“time”{
//创建您的工时模型
打印(时间字符串)
//仅当“值”数组中有一个“时间”成员时才使用break
//中断
}
}
//仅当“结果”数组中有一个“值”成员时才使用break
//中断
}
}
}

First-不要在Swift中使用
NSDictionary
NSArray
。使用合适的Swift字典和数组。首先解决这个问题,事情就会简单得多。你的回答中没有时间键。是的,伙计们,你让我开心了!我只删除了
break
,myModel包含了我需要的所有内容。谢谢@Moritz关于value(forKey:)方法,您是对的。这只是我这边的一个打字错误。我已经用object(forKey:)方法替换了它,谢谢。您还看到了哪些错误?这段代码在操场上运行良好,并提供了正确的结果。@Moritz我做了一些重构,现在看起来更像Swift way。