2015-12-09 52 views
4

如何將Swift中的NSObject類對象轉換爲JSON?

var contacts : [ContactsModel] = [] 

class ContactsModel: NSObject 
{ 
    var contactEmail : String? 
    var contactName : String? 
    var contactNumber : String? 
    var recordId : Int32? 
    var modifiedDate : String? 
} 

現在接觸我有6個值一樣

enter image description here

現在我想接觸轉換成JSON我哪有?

我試圖

var jsonData: NSData? 
     do 
     { 
      jsonData = try NSJSONSerialization.dataWithJSONObject(contacts, options:NSJSONWritingOptions.PrettyPrinted) 
     } catch 
     { 
      jsonData = nil 
     } 
    let jsonDataLength = "\(jsonData!.length)" 

但它崩潰的應用程序。

我的問題是手動轉換成一個字典一個非常耗時的6000分鐘需要超過5分鐘,所以而不是我想直接轉換模型到JSON併發送到服務器。

+1

轉換6000個詞典6個條目不應該花5分鐘。你在那裏做錯了什麼。但是沒有你的代碼,我們將無法在那裏爲你提供幫助。 – vikingosegundo

+0

@vikingosegundo生病檢查並更新你 –

+0

讓我們檢查。發佈代碼。 – vikingosegundo

回答

2

您的自定義對象不能直接轉換爲JSONNSJSONSerialization Class Reference說:

可轉化爲JSON必須具有以下屬性的對象:

  • 頂層對象是一個NSArray或NSDictionary的。

  • 所有對象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的實例。

  • 所有的字典鍵都是NSString的實例。

  • 數字不是NaN或無窮大。

你可以手動將對象轉換爲Dictionary或使用一些庫,例如SwiftyJSONJSONModelMantle

+0

我的頂級對象是一個包含字符串的數組。有什麼方法可以在不使用任何以上的SwiftyJSON,JSONModel或Mantle的情況下進行轉換。我的問題是手動轉換成字典非常耗時,6000分鐘需要5分鐘以上。 –

+1

聽起來你的代碼有問題。轉換6000個對象應該只需要幾毫秒,而不是幾分鐘。 – Adam

+0

是的,你是對的。對於6000條記錄,for循環只需要2秒鐘。我通過向服務器發送500個批量大小來完成我的問題。 –

2

如果您只是想將一個簡單的Swift對象轉換爲JSON靜態函數,而不直接對NSObject或NS類型進行任何繼承或依賴關係。退房:

https://github.com/peheje/JsonSerializerSwift

完全免責聲明。我做到了。簡單使用:

//Arrange your model classes 
class Object { 
    var id: Int = 182371823 
    } 
class Animal: Object { 
    var weight: Double = 2.5 
    var age: Int = 2 
    var name: String? = "An animal" 
    } 
class Cat: Animal { 
    var fur: Bool = true 
} 

let m = Cat() 

//Act 
let json = JSONSerializer.toJson(m) 

目前支持標準類型,可選的標準類型,數組,nullables標準類型,自定義類,繼承,自定義對象的組合物的陣列的陣列。

+1

只是在吹!做得好。 –