我正在尝试下载文章列表并将其插入表格视图中。但是,我似乎在检索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方法来完成所有这些。
提前致谢!
答案 0 :(得分:2)
JSON更嵌套:
JSONArray arr = new JSONArray();
for (int i = 0 ; i < hitsArray.length(); i++) {
JSONObject jObject = hitsArray.getJSONObject(i);
arr.put(jObject.get("_source"));
}
request.setAttribute("jsonObject", arr);
RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
dispatcher.forward(request, response);
对于深度嵌套的JSON,建议使用像SwiftyJSON这样的库。
由于代码只是读取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)
}
}
,而Swift总是使用本机集合类型,除非你绝对没有选择。
答案 1 :(得分:0)
试试这段代码,
if let jsonObject: AnyObject = NSJSONSerialization.JSONObjectWithData(articleJSON, options: nil, error:&error) {
if let dict = jsonObject as? NSDictionary {
println(dict)
} else {
println("not a dictionary")
}
} else {
println("Could not parse JSON: \(error!)")
}
希望它有用