Swift使用String创建JSON对象

时间:2015-06-18 03:47:14

标签: ios json swift

我正在尝试使用我从数据库获取的字符串作为使用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对象时可能缺少什么?

4 个答案:

答案 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: [])