Json 将NSData对象转换为NSDictionary的问题
我试图从JSON文件中提取信息。JSON输出是否可能有问题?似乎有一些奇怪的编码。它来自一个博客 JSON: 我成功创建了Json 将NSData对象转换为NSDictionary的问题,json,swift,nsdata,Json,Swift,Nsdata,我试图从JSON文件中提取信息。JSON输出是否可能有问题?似乎有一些奇怪的编码。它来自一个博客 JSON: 我成功创建了NSData对象,但是NSJSONSerialization失败,请参见代码: func parseJSON(jsonString: String) -> [String: AnyObject]? { guard let data: NSData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
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
}
}
谢谢 您的代码工作正常问题是您的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的开头添加了一些键以使其正常工作。尽管如此,我强烈建议您使用一种非常好的方式解析JSON文件
删除HTML字符串
扩展字符串{
/**
去除传递字符串的HTML标记。
-参数代码:用于剥离HTML的字符串。
-返回:不带HTML标记的新字符串。
*/
func stripHtmlTags()->字符串{
返回self.stringByReplacingOccurrencesOfString(“]+>”,带字符串:“”,选项:。RegularExpressionSearch,范围:nil)
}
}
我希望这能对你有所帮助。Victor,谢谢你的回复,但我仍在努力解决这个问题。正如您所建议的,JSON确实存在问题。不过,我对这个问题有了更好的认识。我正在从MS SQL数据库中提取博客文章。这些帖子是HTML编码的。当我创建NSData对象时,html被转换为UTF8,其中的字符在我尝试访问该键中的值时会导致错误。在创建NSData对象之前,您知道如何删除HTML吗?谢谢@MartinMuldoon我很久以前也遇到过同样的问题,我用正则表达式删除了HTML字符串。查看我的更新答案在顶层,您的JSON似乎是一个NSArray,只有一项是字典。。。
Optional(["xyz": (
{
subtitle = "";
summary = "";
title = "";
}
)])
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)
}
}