如何在Swift中将NSObject类对象转换为JSON?
我有 及 现在在contacts中,我有6个值,比如 现在我想把联系人转换成JSON,我怎么能呢 我试过了如何在Swift中将NSObject类对象转换为JSON?,json,swift,nsobject,nsjsonserialization,Json,Swift,Nsobject,Nsjsonserialization,我有 及 现在在contacts中,我有6个值,比如 现在我想把联系人转换成JSON,我怎么能呢 我试过了 class ContactsModel: NSObject { var contactEmail : String? var contactName : String? var contactNumber : String? var recordId : Int32? var modifiedDate : String? } 但它会使应用程序崩溃 我的问题
class ContactsModel: NSObject
{
var contactEmail : String?
var contactName : String?
var contactNumber : String?
var recordId : Int32?
var modifiedDate : String?
}
但它会使应用程序崩溃
我的问题是手动一个接一个地转换到字典非常耗时,6000条记录需要5分钟以上的时间,因此我希望直接将模型转换为JSON并发送到服务器。您的自定义对象无法直接转换为
JSON
。说:
可转换为JSON的对象必须具有以下属性:
- 顶级对象是NSArray或NSDictionary
- 所有对象都是NSString、NSNumber、NSArray、NSDictionary或NSNull的实例
- 所有字典键都是NSString的实例
- 数字不是NaN或无穷大
词典
,或者使用一些库,如、或
编辑:目前,使用swift 4.0+,您可以使用
Codable
协议轻松地将对象转换为JSON。这是一个本机解决方案,不需要第三方库。请参阅来自Apple的文档。当数组仅包含JSON可编码值(字符串、数字、字典、数组、nil)时,可以对数组使用NSJSONSerialization
首先需要创建JSON对象,然后才能使用它(您的代码正在崩溃,因为contact不是JSON对象!)
您可以参考下面的链接
如果您只想在JSON静态函数中使用一个简单的Swift对象,而不需要直接继承或依赖NSObject或NS类型。退房: 完整免责声明。我成功了。简单使用:
var jsonData: NSData?
do
{
jsonData = try NSJSONSerialization.dataWithJSONObject(contacts, options:NSJSONWritingOptions.PrettyPrinted)
} catch
{
jsonData = nil
}
let jsonDataLength = "\(jsonData!.length)"
当前支持标准类型、可选标准类型、数组、可空数组标准类型、自定义类数组、继承、自定义对象组合。我的顶级对象是一个包含字符串的数组。是否有任何方法可以在不使用上述任何一种SwiftyJSON、JSONModel或Mantle的情况下进行转换。我的问题是手动转换到字典非常耗时,6000条记录需要5分钟以上。听起来你的代码好像有问题。转换6000个对象只需要几毫秒,而不是几分钟。是的,你是对的。循环6000条记录只需2秒钟。我通过向服务器发送500个批量大小的文件完成了我的问题。SwiftyJSON是最差的库。我将其用于NSObject,它显示了SwiftyJSON.SwiftyJSONError.unsupportedType。因提到错误的图书馆而被否决;)@ShivamPokhriyal SwiftyJSON是一个支持良好的库,在Github上有17k个星星。在苹果推出Codable之前,它曾是许多开发者的首选库。也就是说,我编辑了我的答案,添加了一些关于Codableconverting 6000字典的信息,6个条目不应该花费5分钟。你在那里做错了什么。但是如果没有你的代码,我们将无法帮助你。@vikingosegundo我会检查并更新你让我们检查。发布代码。是的,你是对的@vikingosegundo。循环6000条记录只需2秒钟。我通过向服务器发送500个批量大小的邮件来完成我的问题。您以前是否逐个发送过?导致6000个网络请求?即使在高速网络上,请求也很慢。您应该始终尽量减少数量。我没有为我的NSObject类获取适当的数据,因为它在许多地方都会中断。您能否在Github上使用您尝试序列化的类创建一个问题?
var jsonData: NSData?
do
{
jsonData = try NSJSONSerialization.dataWithJSONObject(contacts, options:NSJSONWritingOptions.PrettyPrinted)
} catch
{
jsonData = nil
}
let jsonDataLength = "\(jsonData!.length)"
//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)