Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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_Parsing_Dictionary - Fatal编程技术网

Json 快速搜索字典值中的值

Json 快速搜索字典值中的值,json,swift,parsing,dictionary,Json,Swift,Parsing,Dictionary,我有一个我的应用程序获取的URL。它打印一个有两个键的字典,但其中一个键里面有很多我想为我的应用程序获取的信息 URL可以获取大量信息,但不是传统的字典 这是一个非常简化的版本: ["person": name: John height: 187, "fruit": colour: red ] 等等 所以我只想知道关键人物里面的人的名字,但是我很难找到这个 有没有办法做到这一点?我一直在尝试JSON解析,对于循环,我被卡住了 编辑: 它不是字典里的字典。如果你想看看我在做什么。只需复制并粘

我有一个我的应用程序获取的URL。它打印一个有两个键的字典,但其中一个键里面有很多我想为我的应用程序获取的信息

URL可以获取大量信息,但不是传统的字典

这是一个非常简化的版本:

["person": 
name: John
height: 187, "fruit": colour: red 
]
等等

所以我只想知道关键人物里面的人的名字,但是我很难找到这个

有没有办法做到这一点?我一直在尝试JSON解析,对于循环,我被卡住了

编辑:

它不是字典里的字典。如果你想看看我在做什么。只需复制并粘贴此链接。这是我正在使用的一个例子

我只需要卖方名称或货币等

读取并打印链接的代码:

    override func viewDidLoad() {
    super.viewDidLoad()
    fetchData { (dict, error) in
        print(dict!)
    }
}



func fetchData(completion: @escaping ([String:Any]?, Error?) -> Void) {
    let url = URL(string: link)!

    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        guard let data = data else { return }
        do {
            if let array = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String:Any]{
                completion(array, nil)
            }
        } catch {
            print(error)
            completion(nil, error)
        }
    }
    task.resume()
}

您正在获取的数据是JSON。为了使用它,你必须解码它。推荐的方法是在Swift中使用JSONDecoder

首先,您必须定义与数据模型相对应的模型,并使其符合可编码协议:

结构应用程序:可编码{ var sellerName:String //或者,如果不想使用枚举,可以使用字符串。 var货币:货币 枚举货币:字符串,可编码{ 澳大利亚澳元=澳元, 案例英国英镑=英镑, 案例欧元=欧元, 案例香港美元=港币, 案例usDollar=USD //用所有的货币完成这个… } } 结构JSONResult:Codable{ var resultCount:Int var结果:[应用程序] } 完成此操作后,您只需编辑fetchData方法,使其返回一个填充了您获取的数据的数组应用程序

Swift 4版本:

func fetchDatacompletion:@escaping JSONResult?,错误?->空虚{ guard let url=URLstring:link else{return} 让task=URLSession.shared.dataTaskwith:url{data,response,中的错误 如果let error=error{ 完成零,错误 回来 }如果let data=data,则为else{ 做{ let decoder=JSONDecoder 让result=try decoder.decodeJSONResult.self,from:data 完成结果,无 }抓住{ 打印错误 完成零,错误 } } } 任务。恢复 } 使用结果类型的Swift 5版本:

func fetchDatacompletion:@escaping Result->Void{ guard let url=URLstring:link else{return} 让task=URLSession.shared.dataTaskwith:url{data,response,中的错误 如果let error=error{ 完成失败错误 回来 }如果let data=data,则为else{ 做{ let decoder=JSONDecoder 让result=try decoder.decodeJSONResult.self,from:data 完成。成功结果 }抓住{ 打印错误 完成失败错误 } } } 任务。恢复 } 字典数据为:

let dict = ["person": ["name": "John", "height": "187"], "fruit": ["colour": "red"]]
假设你需要那个人的名字。所以你可以用下面的方法来做

if let person = dict["person"], let name = person["name"] as? String {
    print (name)
}

这些信息太过简单,太过含糊,无法提供任何建议。它听起来绝对像是字典中的一本字典,所以如果不是这样,你需要更好地解释它的结构及其不同之处。如果你有相关的代码,请把它包含在问题本身,而不是作为一个链接。在该代码中,它显示了一个带有两个键的词汇。在其中一个关键是所有的信息,我想提取,但在某些部分。如果你看那段代码,你会发现它没有编译。@PeterDutton我还编辑了我的答案以获得更精确的信息。