我想在我的swift项目中创建一个函数,将String转换为Dictionary json格式但是我遇到一个错误:
无法转换表达式的类型(@lvalue NSData,选项:IntegerLitralConvertible ...
这是我的代码:
func convertStringToDictionary (text:String) -> Dictionary<String,String> {
var data :NSData = text.dataUsingEncoding(NSUTF8StringEncoding)!
var json :Dictionary = NSJSONSerialization.JSONObjectWithData(data, options:0, error: nil)
return json
}
我在Objective-C中创建了这个函数:
- (NSDictionary*)convertStringToDictionary:(NSString*)string {
NSError* error;
//giving error as it takes dic, array,etc only. not custom object.
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
return json;
}
6 回答
警告:如果由于某种原因必须使用JSON字符串,则这是将JSON字符串转换为字典的便捷方法 . 但是如果你有JSON data 可用,你应该改为work with the data,而根本不使用字符串 .
Swift 3
Swift 2
Original Swift 1 answer:
在您的版本中,您没有将适当的参数传递给
NSJSONSerialization
并忘记转换结果 . 此外,最好检查可能的错误 . 最后一点:仅当您的值为String时,此方法才有效 . 如果它可能是另一种类型,最好像这样声明字典转换:当然,您还需要更改函数的返回类型:
我是've updated Eric D'的回答 Swift 2 :
Swift 3 :
使用Swift 3,
JSONSerialization
有一个名为jsonObject(with:options:)的方法 .jsonObject(with:options:)
有以下声明:当您使用
jsonObject(with:options:)
时,您必须处理错误处理(try
,try?
或try!
)并键入强制转换(来自Any
) . 因此,您可以使用以下模式之一解决问题 .#1 . 使用抛出并返回非可选类型的方法
用法:
#2 . 使用抛出并返回可选类型的方法
用法:
#3 . 使用不抛出并返回非可选类型的方法
用法:
#4 . 使用不抛出并返回可选类型的方法
用法:
斯威夫特4
我找到了一个代码,将json字符串转换为NSDictionary或NSArray.just添加扩展名 SWIFT 3.0
HOW TO USE
EXTENSTION
}