2016-11-06 7 views
2

私は2つの正確にjsonオブジェクトを持っていますが、1つは関数から作成され、もう1つはハードコードされています。 。?奇妙でエラーinvalid top-level type、どれ先端TKSswift 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

myDataインスタンスを調べ、実際に正しいことを確認するために、jsonData行にブレークポイントを設定しましたか? – TheValyreanGroup

+0

@TheValyreanGroupはい、私はそうでした、それは彼らが全く同じだと言った理由です –

答えて

0

JSONSerializationに関するドキュメントで与えられるよう:

JSONに変換することができるオブジェクトは、次の特性持っている必要があります。

最上位オブジェクトはNSArrayまたはNSDictionaryです。すべてのオブジェクトは、NSString、NSNumber、NSArray、NSDictionary、またはNSNullのインスタンスです。

すべての辞書キーはNSStringのインスタンスです。数値はNaNまたは無限大ではありません。

他のルールが適用される場合があります。指定されたオブジェクトをJSONデータに変換できるかどうかを判断するには、isValidJSONObject(_ :)をコールするか、変換を試みてください。

  1. 私は、関数から来る1はNSDateオブジェクトの代わりに、NSStringのオブジェクトを持っているかもしれないと思います。

  2. その他の理由は、myDataオブジェクトがオプションであるためです。 JSONSerializationは、オブジェクトがオプションであるようなエラーを出す可能性があります。

これらの2つの理由のいずれかが原因であるかどうかを確認してください。それをより良くするための編集を提案してください。

関連する問題