考虑重组数据。您需要构造数据模型以匹配JSON数据的数据结构。只能包含所需内容,但必须包含要访问的属性的每个父级或级别。以维基百科API的以下示例为例。它打印出JSON数据结构中三个层次的标题属性。它遗漏了几个属性,正如您可以从JSON示例代码中看到的那样,但是它包含了访问我想要的属性所需的每个父级。
import UIKit
struct Item: Decodable {
var title: String
}
struct Search: Decodable {
var search: [Item]
}
struct Result: Decodable {
var query: Search
}
func getSearchResults(){
let url = URL(string: "https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=swift%204&utf8=&format=json")!
URLSession.shared.dataTask(with: url) { (data, response, error) in
if let urlResponse = response as? HTTPURLResponse, urlResponse.statusCode == 200 {
guard let data = data else { return }
do {
let results = try JSONDecoder().decode(Result.self, from: data)
for item in results.query.search {
print(item.title)
}
} catch let error as NSError {
print("error: \(error)")
}
}
}.resume()
}
getSearchResults()
JSON示例:
{
"batchcomplete": "",
"continue": {
"sroffset": 10,
"continue": "-||"
},
"query": {
"searchinfo": {
"totalhits": 30349
},
"search": [
{
"ns": 0,
"title": "Swift",
"pageid": 219023,
"size": 13896,
"wordcount": 1496,
"snippet": "The <span class=\"searchmatch\">swifts</span> are a family, Apodidae, of highly aerial birds. They are superficially similar to swallows, but are not closely related to any passerine species",
"timestamp": "2018-12-28T21:29:44Z"
},
{
"ns": 0,
"title": "Swift (programming language)",
"pageid": 42946389,
"size": 49365,
"wordcount": 5244,
"snippet": "2015. <span class=\"searchmatch\">Swift</span> 3.0 was released on September 13, 2016. <span class=\"searchmatch\">Swift</span> <span class=\"searchmatch\">4</span>.0 was released on September 19, 2017. <span class=\"searchmatch\">Swift</span> <span class=\"searchmatch\">4</span>.1 was released on March 29, 2018. <span class=\"searchmatch\">Swift</span> won first",
"timestamp": "2018-12-19T02:52:33Z"
},
{
"ns": 0,
"title": "Taylor Swift",
"pageid": 5422144,
"size": 237225,
"wordcount": 18505,
"snippet": "Taylor Alison <span class=\"searchmatch\">Swift</span> (born December 13, 1989) is an American singer-songwriter. One of the world's leading contemporary recording artists, she is known",
"timestamp": "2018-12-26T21:55:51Z"
},
这是打印输出:
//Swift
//Swift (programming language)
//Taylor Swift