我正在尝试使用我从数据库获取的字符串作为使用swift的JSON。我试图将字符串转换为数据对象,然后使用JSONSerialization,但结果总是回来为零。
以下是我的代码示例:
var string = "{Param1: \"Value\", Param2: \"value2\", Param3: \"value3\"}"
let data = (reducedOptionsString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
if let d = data{
var err : NSErrorPointer = nil
let parsedObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(d, options: NSJSONReadingOptions.MutableLeaves, error: err)
if let dict = parsedObject as? Dictionary<String, AnyObject>{
...
}
}
由于某种原因,parsedObject总是以nil
的形式返回有没有人知道将我的字符串数据转换为可以使用的JSON对象时可能缺少什么?
答案 0 :(得分:5)
你的json无效,键也必须用引号括起来。
"{ \"Param1\": \"Value\", \"Param2\": \"value2\", \"Param3\": \"value3\"}"
另外,正如@zaph指出的那样,它是你要转换为数据的变量string
。
var string = "{\"Param1\": \"Value\", \"Param2\": \"value2\", \"Param3\": \"value3\"}"
if let data = string.dataUsingEncoding(NSUTF8StringEncoding){
var err : NSErrorPointer = nil
let parsedObject = NSJSONSerialization.JSONObjectWithData(
data!,
options: NSJSONReadingOptions.MutableLeaves,
error: err) as? Dictionary<String, AnyObject>
if (parsedObject != nil) {
...
}
else {
if (err != nil) {
println("Error: \(err)")
}
else {
println("Error: unexpected error parsing json string")
}
}
}
或者,您可以使用SwiftyJSON这个非常受欢迎的库来处理swift上的json,这可以让您的生活更轻松一些。
答案 1 :(得分:3)
var string = "{\"Param1\": \"Value\", \"Param2\": \"value2\", \"Param3\": \"value3\"}"
if let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)
{
var err : NSErrorPointer = nil
let parsedObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableLeaves, error: err)
if (err != nil)
{
println("error handling...")
}
if let dict = parsedObject as? Dictionary<String, AnyObject>
{
println("XD")
}
}
答案 2 :(得分:1)
您只需在自己的OWN代码中替换以下两行,其余的就可以了。 :)
var string = "{\"Param1\": \"Value\", \"Param2\": \"value2\", \"Param3\": \"value3\"}"
let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)
答案 3 :(得分:0)
Swift 5 示例:
let properties: [(String, Any?)] = [("firstName", firstName),
("lastName", lastName),
("city", city),
("state", state),
("zipCode", zipCode),
("country", country)]
let body = properties.compactMap({ property -> (String, Any)? in
if let value = property.1 {
return (property.0, value)
} else {
return nil
}
})
let jsonDict = Dictionary(uniqueKeysWithValues: body)
let jsonData = try? JSONSerialization.data(withJSONObject: jsonDict, options: [])