【问题标题】:Convert an array of objects to JsonArray in Swift3在 Swift3 中将对象数组转换为 JsonArray
【发布时间】: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 我不确定我是否遵循正确的技术。

标签: json swift swift3


【解决方案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\\"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2012-01-31
    • 2018-08-20
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多