如何在Swift中将NSObject类对象转换为JSON?

时间:2015-12-09 06:03:43

标签: json swift nsobject nsjsonserialization

我有

var  contacts : [ContactsModel] = []

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

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

enter image description here

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

我试过

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

但它崩溃了应用程序。

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

3 个答案:

答案 0 :(得分:3)

如果你只是想要一个简单的Swift对象到JSON静态函数而没有任何继承或直接依赖于NSObject或NS类型。退房:

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)

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

答案 1 :(得分:2)

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

  

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

     
      
  • 顶级对象是NSArray或NSDictionary。

  •   
  • 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。

  •   
  • 所有字典键都是NSString的实例。

  •   
  • 数字不是NaN或无穷大。

  •   

您可以手动将对象转换为Dictionary或使用某些库,例如SwiftyJSONJSONModelMantle

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

答案 2 :(得分:0)

当数组只包含JSON可编码值(字符串,数字,字典,数组,零)时,可以对阵列使用NSJSONSerialization

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

<强> you can refere below link

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