2016-01-19 41 views
0

我試圖從JSON文件中提取信息。是否有可能JSON輸出有問題?似乎有一些奇怪的編碼。它來自博客。將NSData對象轉換爲NSDictionary的問題

JSON

[{ 
    "title": "A visit to McSorley\u0027s Old Ale House", 
    "subtitle": "", 
    "summary": "\u0026lt;p\u0026gt;McSorley\u0026#39;s Ale House is Manhattan\u0026#39;s oldest pub\u0026lt;/p\u0026gt;" 
}] 

我成功地創建NSData對象,但NSJSONSerialization失敗,請參見代碼:

func parseJSON(jsonString: String) -> [String: AnyObject]? { 
    guard let data: NSData = jsonString.dataUsingEncoding(NSUTF8StringEncoding) 
     else { return nil } 

    do { 
     let dictionary = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: AnyObject] 
     return dictionary 

    } catch { 
     print("JSON Error: \(error)") 
     return nil 
    } 
} 

謝謝!

+0

在頂層您的JSON似乎是一個NSArray,只有一個項目是一個字典... – Larme

回答

0

你的代碼工作正常,問題是你的JSON文件,試圖用例如另一個JSON文件,以下之一:

var json = "{\"xyz \":[{\"title\": \"\",\"subtitle\": \"\",\"summary\": \"\"}]}" 

func parseJSON(jsonString: String) -> [String: AnyObject]? { 

    guard let data: NSData = jsonString.dataUsingEncoding(NSUTF8StringEncoding) 
     else { return nil } 

    do { 
     let dictionary = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: AnyObject] 
     return dictionary 

    } catch { 
     print("JSON Error: \(error)") 
     return nil 
    } 
} 

輸出是:

Optional(["xyz": (
    { 
    subtitle = ""; 
    summary = ""; 
    title = ""; 
} 
)]) 

你錯過了JSON字典的關鍵字,如果是這樣的話,我會在JSON的開頭放一些關鍵字來使其起作用。不過,我強烈建議您使用SwiftyJSON以極好的方式解析JSON文件。

刪除HTML字符串

extension String { 

    /** 
    Strip the HTML tags for the string passed. 

    - parameter code: String to strip HTML. 

    - returns: The new string without HTML tags. 
    */ 
    func stripHtmlTags() -> String { 
     return self.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil) 
    } 
} 

我希望這可以幫助您。

+0

維克托,感謝您的答覆,但我仍然在與此掙扎。正如你所建議的,它似乎是JSON的一個問題。儘管如此,我對這個問題有了更好的理解。我正在從MS SQL數據庫中提取博客文章。帖子是HTML編碼的。當我創建NSData對象時,html會轉換爲UTF8,當我嘗試訪問該鍵中的值時,該字符會導致錯誤。你有什麼想法我可以在創建NSData對象之前刪除HTML嗎?謝謝! –

+0

@MartinMuldoon我很久以前就有同樣的問題,我用正則表達式去除HTML字符串。看到我的更新答案 –