2016-04-15 471 views
-2

這裏是一個具有以下JSON如何從RTF文件解析JSON

1. [ 
2.    { 
3.        「key1」: 「value1」, 
4.        「key2」: 「value2」, 
5.        「key3」: 「value3」, 
6.        「key4」: 「value4」 
7.     
8.    }, 
9.    { 
10.        「key1」: 「value1」, 
11.        「key2」: 「value2」, 
12.        「key3」: 「value3」, 
13.        「key4」: 「value4」 
14.    } 
15. ] 

這裏我Json.rtf文件我試圖

let path = NSBundle.mainBundle().pathForResource("Json", ofType: "rtf") 
    if let jsonData = NSData(contentsOfMappedFile: path!) 
    { 

     if let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary 
     { 

     } 
    } 

NSData的代碼中我得到既不是獲得轉換爲NSDictionary或NSArray。請用正確的方法幫助我。

+3

**在JSON **中,'['表示數組*的開始*。 JSON字典以'{'開頭。注意不要將JSON語法與數組和字典的Swift語法混淆,這是誤解的常見來源。 – Moritz

+2

爲什麼選擇RTF? JSON應該是純文本。 'NSData'對象還包含所有不能由(de)序列化器解析的豐富文本格式信息。 – vadian

+0

與@EricD相同。 Personnally,我總是忘記哪一個,所以我只是尋找結構,尋找鍵(字典)或只是一個「列舉」(陣列) – Larme

回答

1

如果你真的,真的,真的需要RTF你必須將它轉換爲純文本的例子le

let path = NSBundle.mainBundle().URLForResource("Json", withExtension: "rtf") 
if let data = NSData(contentsOfURL: path!), attributedString = NSAttributedString(RTF: data, documentAttributes: nil) { 
    let plainString = attributedString.string 
    let jsonData = plainString.dataUsingEncoding(NSUTF8StringEncoding) 
    do { 
    if let json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as? [[String:AnyObject]] { 
     // do something with json 
    } 
    } catch { 
    print(error) 
    } 
} 

但是一次使用純文本要容易得多。 PS:在Swift中,總是推薦使用Swift原生集合類型,而不是非常規類型的未指定的基類NSArrayNSDictionary

+0

是的,我同意..純文本更簡單..謝謝你的解決方案.. –

1

你的反應開始在Arraydictionary,在這個地方使用

if let json: NSArray = NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSArray 
    { 

    } 
} 

更新

do { 
let json: NSArray = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! NSArray 
// use anyObj here 
} catch { 
print("json error: \(error)") 
} 

更多的信息,請參閱本tutorial

+0

謝謝@ Anbu.Karthik –