gpt4 book ai didi

ios - 在 swift 2.0 中解析 JSON 时出错

转载 作者:行者123 更新时间:2023-11-28 12:50:36 24 4
gpt4 key购买 nike

我正在尝试下载文章列表并将其插入到表格 View 中。但是,我似乎在检索 JSON 文件并对其进行解析时遇到了问题。

我的代码如下:

    override func viewDidLoad() {
super.viewDidLoad()

self.downloadArticles()

self.tableView.reloadData()
}


func downloadArticles(){
var url: NSURL
url = NSURL(string: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20feed%20where%20url=%27www.abc.net.au%2Fnews%2Ffeed%2F51120%2Frss.xml%27&format=json")!
print(url)
let task = NSURLSession.sharedSession().dataTaskWithURL(url){
(data, response, error) in
if (error != nil){
print("Error \(error)")
} else{
self.parseArticleJSON(data!)
}
self.syncCompleted = true
self.tableView.reloadData()
}
task.resume()
}

func parseArticleJSON(articleJSON:NSData)
{
do{

let result = try NSJSONSerialization.JSONObjectWithData(articleJSON, options: NSJSONReadingOptions.MutableContainers) as? NSArray

//let jsonData:NSArray = (try NSJSONSerialization.JSONObjectWithData(articleJSON, options:NSJSONReadingOptions.MutableContainers) as? NSArray)!

let newArticlesArray = result as NSArray!
//NSLog("Found \(newArticlesArray.count) new articles!")
for article in (newArticlesArray as NSArray as! [NSDictionary])
{
print (article.objectForKey("title")! as? String)

//let a = Article (t: <#T##String#>, da: <#T##String#>, de: <#T##String#>, i: <#T##NSURL#>)

//articlesArray.addObject(a);
}
}catch {
print("JSON Serialization error")
}

}

在 parseArticleJSON 方法中(我知道它还没有完全完成)。我在行收到错误:

for article in (newArticlesArray as NSArray as! [NSDictionary])

它说:

fatal error: unexpectedly found nil while unwrapping an Optional value

我曾尝试在这些论坛上进行一些研究,但找不到任何对我有帮助的回复,所以我想知道是否有人能够帮助我。

我需要使用原生的 swift JSON 方法来完成这一切。

提前致谢!

最佳答案

JSON 更加嵌套:

typealias JSONDictionary = Dictionary<String,AnyObject>

func parseArticleJSON(articleJSON:NSData) {
do {
let jsonObject = try NSJSONSerialization.JSONObjectWithData(articleJSON, options: [])
if let jsonResult = jsonObject as? JSONDictionary,
query = jsonResult["query"] as? JSONDictionary,
results = query["results"] as? JSONDictionary,
newArticlesArray = results["item"] as? [JSONDictionary] {
for article in newArticlesArray {
print(article["title"] as! String)
}
}
} catch let error as NSError {
print(error)
}
}

对于深度嵌套的 JSON,建议使用像 SwiftyJSON 这样的库。

由于代码仅读取 JSON 对象,因此根本不需要选项 MutableContainers 并且在 Swift 中始终使用原生集合类型,除非您别无选择。

关于ios - 在 swift 2.0 中解析 JSON 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com