gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:30:10 30 4
gpt4 key购买 nike

我有这样的数据模型,它有一个名为 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\\\",\\\"电子邮件\\\":\\\"\\\"},\",\n\".........\n]

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

谢谢你的帮助

最佳答案

我认为您正在双重序列化您的输出。这就是为什么我要求提供联系字符串。

尝试:

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\\"

关于json - 在 Swift3 中将对象数组转换为 JsonArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40578824/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com