Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中将NSObject类对象转换为JSON?_Json_Swift_Nsobject_Nsjsonserialization - Fatal编程技术网

如何在Swift中将NSObject类对象转换为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? } 但它会使应用程序崩溃 我的问题

我有

现在在contacts中,我有6个值,比如

现在我想把联系人转换成JSON,我怎么能呢

我试过了

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)