如何将 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 并发送到服务器。
您的自定义对象无法直接转换为 JSON
。 NSJSONSerialization 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
如果你只是想要一个简单的 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)
目前支持标准类型、可选标准类型、数组、可空标准类型数组、自定义数组类、继承、自定义对象组合。
我有
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 并发送到服务器。
您的自定义对象无法直接转换为 JSON
。 NSJSONSerialization 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
如果你只是想要一个简单的 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)
目前支持标准类型、可选标准类型、数组、可空标准类型数组、自定义数组类、继承、自定义对象组合。