我有我的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]
请帮助我以更好,更干净的方式做到这一点
感谢您的帮助
答案 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\\"