2016-11-13 66 views
1

转换对象的数组JsonArray我有我的DataModel因为这样,它有一个函数名的toJSON将此对象转换成JSON字符串表示在Swift3

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

你能分享'contactsStr'的打印吗? – Frankie

+0

忘记'prettyPrinted',导致大部分*怪异*输出 – vadian

+0

@Frankie 这就是contactStr看起来如何 [“{\”phone \“:\”+ xxx \“,\”name \“:\”yyy \“,”email“:\”\“}”,“{\”phone \“:\”+ xxx \“,\”name \“:\”yy \“,\”email \ “\”}“,”{\“phone \”:\“xxx \”,\“name \”:\“yyy \”,\“email \”:\“\”}“,”{\“phone \“:\”+ yyy \“,\”name \“:\”xxxx \“,\”email \“:\”\“}”,“{\”phone \“... – user2873720

回答

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