簡體   English   中英

快速讀取json文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM