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