如何将 NSObject class 对象转换为 Swift 中的 JSON?

How to convert NSObject class object into JSON in Swift?

我有

var  contacts : [ContactsModel] = []

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

现在在联系人中我有 6 个值,例如

现在我想将联系人转换为 JSON 我该怎么做?

我试过了

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

但它会使应用程序崩溃。

我的问题是将 6000 条记录手动转换为字典非常耗时,需要 5 分钟以上,所以我想直接将模型转换为 JSON 并发送到服务器。

您的自定义对象无法直接转换为 JSONNSJSONSerialization Class Reference 说:

An object that may be converted to JSON must have the following properties:

  • The top level object is an NSArray or NSDictionary.

  • All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.

  • All dictionary keys are instances of NSString.

  • Numbers are not NaN or infinity.

您可以手动将对象转换为 Dictionary 或使用 SwiftyJSON, JSONModel or Mantle.

等库

编辑:目前,使用 swift 4.0+,您可以使用 Codable 协议轻松将您的对象转换为 JSON。这是一个本地解决方案,不需要第三方库。请参阅 Apple 的 Using JSON with Custom Types 文档。

当数组仅包含 JSON 可编码值(字符串、数字、字典、数组、nil)时,您可以使用 NSJSON 序列化数组

首先你需要创建 JSON 对象然后你可以使用它(你的代码崩溃因为 contact 不是 JSON 对象!)

you can refere below link

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/#//apple_ref/doc/uid/TP40010946-CH1-SW9

如果你只是想要一个简单的 Swift 对象到 JSON 静态函数而不需要任何继承或依赖于 NSObject 或直接 NS-types。查看:

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)

目前支持标准类型、可选标准类型、数组、可空标准类型数组、自定义数组类、继承、自定义对象组合。