这是我的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。请帮我正确的方法。
答案 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本机集合类型,而不是非常类型的未指定基础类NSArray
和NSDictionary
。