我有两个完全json的对象,一个是从一个函数创建的,另一个是硬编码的,硬编码的是有效的,另一个没有#(它总是抱怨错误invalid top-level type
,很奇怪。任何提示?Tks
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
}
答案 0 :(得分:0)
JSONSerialization
,如文档中所示:
可以转换为JSON的对象必须具有以下属性:
顶级对象是NSArray或NSDictionary。所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
所有字典键都是NSString的实例。数字不是NaN或无穷大。
其他规则可能适用。调用isValidJSONObject(_ :)或尝试转换是判断给定对象是否可以转换为JSON数据的明确方法。
我认为来自该函数的那个可能有一个NSDate对象而不是NSString对象。
另一个原因是因为您的myData
对象是可选的。 JSONSerialization
可能会出现错误,因为该对象是可选的。
请检查是否是由于这两个原因之一。随意建议编辑以使其更好。