2016-11-06 93 views
2

我有兩個確切的json對象,一個是從一個函數創建的,另一個是硬編碼的,硬編碼的工作,另一個沒有(它總是抱怨。關於錯誤invalid top-level type,這是奇怪的任何尖端韓國社交協會swift 3,JSON,寫入時無效的頂級類型

let myData = self.dailyMileage?.toDictionary() 

let directData = ["orgId" : self.orgId, "driverId" : self.driverId, "date" : Utils.getTodaysDate() ] as [String : Any] 

//this won't work unless I substitute myData with directData       
let jsonData = try JSONSerialization.data(withJSONObject: myData, options: .prettyPrinted) 

//this is the function that produces myData, and nothing is nil 
public func toDictionary() -> [String : Any] { 
    let dict = [ "orgId" : orgId , "driverId": driverId, "date" : date] as [String : Any] 
    return dict 
} 
+1

問題因爲'myData'是可選的嗎? – rmaddy

+0

您是否已將斷點放入jsonData行來檢查myData實例並確保它實際上是正確的? – TheValyreanGroup

+0

@TheValyreanGroup是的,我這樣做,這就是爲什麼我說他們是完全一樣的 –

回答

0

JSONSerialization如文檔中給出:

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

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

所有的字典鍵都是NSString的實例。數字不是NaN或無窮大。

其他規則可能適用。調用isValidJSONObject(_ :)或嘗試進行轉換是確定給定對象是否可以轉換爲JSON數據的確定方法。

  1. 我認爲這是一個從功能來的一個可能有一個NSDate對象,而不是一個NSString對象。

  2. 另一個原因是因爲您的myData對象是可選的。 JSONSerialization可能會給出一個錯誤,那就是該對象是可選的。

請檢查是否是由於這兩個原因之一。隨意建議修改以使其更好。