2016-01-19 42 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字符串。看到我的更新答案 –