将NSData Object转换为NSDictionary的问题

时间:2016-01-19 23:48:32

标签: json swift nsdata

我试图从JSON文件中提取信息。是否有可能JSON输出有问题?似乎有一些奇怪的编码。它来自一个博客。

  

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

谢谢!

1 个答案:

答案 0 :(得分: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)
   }
}

我希望这对你有所帮助。