Swift3

2016-11-13 4 views
1

에 JsonArray에 객체의 배열을 변환 나는이 같은 내 DataModel이 있고 그것은 JSON의 문자열 표현이 객체를 변환하는 기능 이름 toJSON을 가지고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로 변환해야합니다.

이 방법을 사용하고 있지만 결과 문자열에 매우 이상한 기호가 나타납니다. 나를 더 깨끗한 방법으로 그것을 할 도와주세요의 내가이

[\n \"{\\\"phone\\\":\\\"+XXXX\\\",\\\"name\\\":\\\"YYYY\\\",\\\"email\\\":\\\"\\\"},\",\n \".........\n]

같은 출력을 얻고있다

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) 
} 

을 가정 해 봅시다 당신의 도움에 대한

감사

+0

'contactsStr'의 지문을 공유 할 수 있습니까? – Frankie

+0

'prettyPrinted'를 잊어 버리면 * 이상한 * 출력의 대부분을 야기합니다. – vadian

+0

@Frankie contactStr는 다음과 같이 나타납니다 : [ "{\"phone \ ": \"+ xxx \ ", \"name \ ": \"yyy \ "이메일 \": \ "이메일 \": \ "이메일 \": \ "전화 번호": \ "xxx \", \ "이름 \": \ " ","{ "전화", "전화 번호", "이름", "예", "이메일": \ "\"} \ "yahoo \", \ "name \": \ "xxxx \", \ "email \": \ "\"} ","{\ "phone \"... – user2873720

답변

1

나는 당신이 출력을 두 번 직렬화하고 있다고 생각한다. 그래서 연락 문자열을 요청했습니다.

시도 :

var contactsStr = [[String: AnyObject]]() 

그리고 직렬화를 인쇄 :와

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 
} 

. \"name\"과 같이 따옴표 만 이스케이프해야합니다. 아니요 \\"name\\"