【发布时间】:2016-11-13 21:07:39
【问题描述】:
我有我的 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]
请帮助我以一种更好更干净的方式来做这件事
感谢您的帮助
【问题讨论】:
-
可以分享
contactsStr的打印吗? -
忘记
prettyPrinted,它会导致大部分奇怪输出 -
@Frankie 这是 contactStr 的样子 ["{\"phone\":\"+xxx\",\"name\":\"yyy\",\"email\":\ "\"}", "{\"电话\":\"+xxx\",\"姓名\":\"yy\",\"电子邮件\":\"\"}", "{\"电话\":\"xxx\",\"姓名\":\"yyy\",\"电子邮件\":\"\"}", "{\"电话\":\"+yyy\", \"name\":\"xxxx\",\"email\":\"\"}", "{\"phone\"...
-
@vadian 这是转换为 JSON 的最佳方式吗?我在 Swift 方面没有太多经验,但我确信 JSON 序列化和反序列化在 Swift 中非常常见。只是想知道正确的做法
-
@vadian 我不确定我是否遵循正确的技术。