【问题标题】:swift 3, JSON, invalid top-level type when writingswift 3,JSON,编写时顶级类型无效
【发布时间】:2017-03-20 02:20:57
【问题描述】:

我有两个完全是 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
}

【问题讨论】:

  • 问题是因为myData 是可选的吗?
  • 您是否在 jsonData 行中放置了一个断点来检查 myData 实例并确保它实际上是正确的?
  • @TheValyreanGroup 是的,我做到了,这就是为什么我说它们完全一样
  • 您的myData 对象是可选的吗?看起来是这样。原因可能是因为这个。请检查我的答案并告诉我它是否有帮助

标签: ios json swift3


【解决方案1】:

JSONSerialization 在文档中给出:

可以转换为 JSON 的对象必须具有以下属性:

顶级对象是 NSArray 或 NSDictionary。所有对象都是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例。

所有字典键都是 NSString 的实例。数字不是 NaN 或无穷大。

其他规则可能适用。调用 isValidJSONObject(_:) 或尝试转换是判断给定对象是否可以转换为 JSON 数据的明确方法。

  1. 我认为来自函数的那个​​可能有一个 NSDate 对象而不是一个 NSString 对象。

  2. 另一个原因是因为您的 myData 对象是可选的。 JSONSerialization 可能会给出一个错误,比如对象是可选的。

请检查是否是由于这两个原因之一。随时提出修改建议以使其变得更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多