如何从rtf文件解析JSON

时间:2016-04-15 08:54:39

标签: ios json swift

这是我的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. ]

这是我试过的代码

   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。请帮我正确的方法。

2 个答案:

答案 0 :(得分:1)

您的回复始于Array而不是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)")
 }

有关其他信息,请参阅此tutorial

答案 1 :(得分:1)

如果你真的,真的,真的需要RTF,你必须将其转换为纯文本,例如

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