在Swift3中将对象数组转换为JsonArray

时间:2016-11-13 21:07:39

标签: json swift swift3

我有我的DataModel,它有一个函数名称toJSON,它将这个对象转换为JSON的字符串表示

ContactEntry: NSObject {
    var name: String!
    var phone: String?
    var email: String?

    func toJson() -> String {
    var dict : [String: AnyObject] = [:]
    dict["name"] = (self.name ??  "") as AnyObject
    dict["phone"] = (self.phone ?? "") as AnyObject
    dict["email"] = (self.email ?? "") as AnyObject


    guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []) else{
        return "{}"
    }

    guard let jsonString = String(data: data, encoding: String.Encoding.utf8) else {
        return "{}"
    }
    return jsonString
}
}

直到现在它才能正常工作,因为我正在获得此对象的正确JSON表示。

现在我必须将ContactEntry数组转换为JsonArray。

我这样做但是我在结果字符串中得到了非常奇怪的符号。 我们说

var contacts = [ContactEntry]()
var contactsStr = [String]()
...
for contact in contacts{
    contactsStr.append(contact.toJson())
}

do{
    let data = try? JSONSerialization.data(withJSONObject: contactsStr, options: [])

    let jsonString = try? String(data: data!, encoding: String.Encoding.utf8)

    print(jsonString)
}

我得到像这样的输出

[\n \"{\\\"phone\\\":\\\"+XXXX\\\",\\\"name\\\":\\\"YYYY\\\",\\\"email\\\":\\\"\\\"},\",\n \".........\n]

请帮助我以更好,更干净的方式做到这一点

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我认为你是双重序列化你的输出。这就是我要求联系字符串的原因。

尝试:

func toJson() -> [String: AnyObject] {
    var dict : [String: AnyObject] = [:]
    dict["name"] = (self.name ??  "") as AnyObject
    dict["phone"] = (self.phone ?? "") as AnyObject
    dict["email"] = (self.email ?? "") as AnyObject
    return dict
}

使用:

var contactsStr = [[String: AnyObject]]()

打印出序列化。它应该只是单独转义\"name\"之类的引号。不是\\"name\\"