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

问题描述 投票:4回答:3

我有

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并发送到服务器。

json swift nsobject nsjsonserialization
3个回答
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文档。


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标准类型数组,自定义类数组,继承,自定义对象组合。


0
投票

当数组仅包含JSON可编码值(字符串,数字,字典,数组,nil)时,可以对阵列使用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

© www.soinside.com 2019 - 2024. All rights reserved.