2016-01-07 99 views
2

我有JSON的問題。我通過互聯網搜索,但沒有找到任何解決方案,爲我工作。解析包含帶有InputReader的數組的JSON字符串?

爲了更好地工作,我將服務器的答案(JSON)保存在* .json文件中。 的JSON是尋找這樣的(短版):

{ 「數據」: 「[{\」 ID \ 「:38,\」 名稱\ 「:\」 安東\ 「},{\」 ID「:160,\」name \「:\」Christopher Eth \「}]」}

我想解析數組,它是以字符串形式在「data」中發送的。我試圖從「數據」中獲取字符串,並在NSJSONSerialization中再次傳遞字符串。

這是正確的方法嗎?不需要

guard let path = NSBundle.mainBundle().pathForResource("names", ofType: "json") else { 
     print("Error finding File") 
     return 
    } 

    do { 
     let data:NSData? = NSData(contentsOfFile: path) 

     if let jsonResult = 
      try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary { 
       let result = jsonResult["data"] 
       if(result == nil){ 
        print("error") 
       }else{ 
        //How can I convert the result! to an Stream to pass it to the JSONSerialization??? 
        let stream = NSInputStream(/*result!*/) 
        let resultArray = try NSJSONSerialization.JSONObjectWithStream(stream: stream, options: NSJSONReadingOptions.MutableContainers) as? NSArray{ 
        //Do something with array 
       } 

    }catch let error as NSError{ 
     print("Error: \(error)") 
     return 
    } 

回答

0

NSStream,只是轉換的JSON字符串NSData並調用JSONObjectWithData第二次。

guard let url = NSBundle.mainBundle().URLForResource("names", withExtension: "json"), jsonData = NSData(contentsOfURL: url) else { 
    print("Error finding File") 
    return 
} 
do { 
    let names = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! [String:AnyObject] 
    if let jsonResult = names["data"] { 
    let nameData = jsonResult.dataUsingEncoding(NSUTF8StringEncoding)! 
    let resultArray = try NSJSONSerialization.JSONObjectWithData(nameData, options: .MutableContainers) as! [[String:AnyObject]] 
    for item in resultArray { 
     print(item["name"]!, item["id"]!) 
    } 
    } else { 
    print("error") 
    } 
} catch let error as NSError { 
    print(error) 
} 
+0

謝謝!有用! – TBockmair