2016-04-15 7 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'オブジェクトには、(シ)シリアライザで解析できないすべてのリッチテキストフォーマット情報も含まれています。 – vadian

+0

@ EricDと同じです。個人的に、私は常にどちらかを忘れるので、キー(辞書)か単に列挙型(配列)を探す構造を探します – Larme

答えて

1

かどうかを確認あなたは本当に、本当に、本当にRTFが必要です。これをEXPLAINのプレーンテキストに変換する必要があります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ネイティブのコレクションタイプを使用することをお勧めします。これは、ファインタイプの未定義のFoundationクラスNSArrayNSDictionaryではなく、常に使用してください。

+0

はい私は同意します..プレーンテキストは簡単です..ソリューションをありがとう.. –

1

あなたの応答がdictionaryで、この場所で

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)") 
} 

を使用しないでArrayで始まり、追加情報については、このtutorial

+0

ありがとうございました@ Anbu.Karthik –

関連する問題