[英]read a json file in swift
嗨,大家好,我在swift項目中有一個json文件,我想閱讀此文件並使用其內容繪制內容。 我在以下位置創建了一個控制器。
import UIKit
class MapViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let jsonData = getJSON("hls.json")
println(jsonData)
let jsonDataResult = parseJSON(jsonData)
println("\(jsonDataResult)")
}
func getJSON(urlToRequest: String) -> NSData{
return NSData(contentsOfURL: NSURL(string: urlToRequest)!)!
}
func parseJSON(inputData: NSData) -> NSDictionary{
var error: NSError?
var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
return boardsDictionary
}
}
不幸的是,它說:致命錯誤:在getJSOn函數解開Optional值時意外發現nil。 我的應用程序目錄中有我所有的swift文件所在的名為hls.json的文件,所以我不知道它是否因為它無法讀取或什么原因。希望有人能幫助我!
在JSON方面,我也是新手。 但是,我想我知道問題出在哪里。 您說過您正在嘗試讀取應用目錄中名為hls.json的文件,但是查看getJSON函數則表明您正在嘗試從Internet上獲取數據。
(如果我錯了,請糾正我)我相信您現在正在做的是嘗試從名為“ hls.json”的網站獲取JSON數據,而不是嘗試訪問您計算機中的文件。
由於不存在帶有網址“ hls.json”的網站,因此調用getJSON(“ hls.json”)將始終返回nil。
解決這個問題的方法是使用
let filePath = NSBundle.mainBundle().pathForResource("hls",ofType:"json")
然后使用
if let data = NSData(contentsOfFile:filePath!, options: NSDataReadingOptions.DataReadingUncached, error:&readError) { success(data: data) }
充當您用於解析JSON的數據。
希望能有所幫助。 同樣,我對此也很陌生,所以我不確定(P)
您正在使用getJSON()
感嘆號強制展開nil。 這是因為您的NSURL可能由於其創建方式而為零。
您可能需要更改getJSON()
函數以正確獲取文件的URL,如下所示:
func getJSON(fileName: String, extn: String) -> NSData?
{
if let fileURL = NSBundle.mainBundle().URLForResource(fileName, withExtension: extn) {
if let data = NSData(contentsOfURL: fileURL) {
return data
}
}
return nil
}
請注意,此函數可能返回nil。 因此,返回簽名是NSData?
。
因此,您必須解開NSData?
在調用parseJSON
函數之前getJSON
函數中刪除,因為parseJSON
采用非可選的NSData
作為參數。
if let
語句如下所示,則可以用另一個方法進行解包:
override func viewDidLoad() {
super.viewDidLoad()
if let jsonData = getJSON("hls", "json") {
println(jsonData)
let jsonDataResult = parseJSON(jsonData)
println("\(jsonDataResult)")
}
}
由於問題是關於getJSON()
的nil展開錯誤,因此我沒有研究parseJSON()
函數的正確性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.