如何在 swift 3 中将具有自定义类的数组转换为 JSON
Posted
技术标签:
【中文标题】如何在 swift 3 中将具有自定义类的数组转换为 JSON【英文标题】:How can I convert an array with custom classes to JSON in swift 3 【发布时间】:2017-01-11 18:43:43 【问题描述】:我需要在 swift 3 中创建以下 json 并且我不想使用外部库。 我尝试了this answer,但我在数组中使用了自定义类(商店和产品),所以它不起作用。
"order":
[
"store": 1,
"product": [
"id": 1,
"quantity": 1
,
"id": 2,
"quantity": 5
]
,
"store": 4,
"product": [
"id": 1,
"quantity": 1
,
"id": 3,
"quantity": 1
]
]
【问题讨论】:
How to Make JSON from Array of Struct in Swift 3?的可能重复 【参考方案1】:很确定您可以通过以下方式完成此操作:
1) 在对象的类中创建一个 toJSON() 函数
2) 在这个对象中创建一个字典来存储属性及其值。
这是基于您的 json 示例的几个小类的示例:
class Order
var store: Store!
var products: [Product]!
init(store: Store, products: [Product])
self.store = store
self.products = products
func toJSON() -> [String : Any]
var dictionary: [String : Any] = [:]
dictionary["store"] = store.toJSON()
var productsDictionary: [Int : Any] = [:]
for index in 0...self.products.count - 1
let product: Product = products[index]
productsDictionary[index] = product.toJSON()
dictionary["product"] = productsDictionary
return dictionary
class Store
var id: Int!
init(id: Int)
self.id = id
func toJSON() -> [String:Any]
var dictionary: [String : Any] = [:]
dictionary["id"] = self.id
return dictionary
class Product
var id: Int!
var quantity: Int!
init(id: Int, quantity: Int)
self.id = id
self.quantity = quantity
func toJSON() -> [String:Any]
var dictionary: [String : Any] = [:]
dictionary["id"] = self.id
dictionary["quantity"] = self.quantity
return dictionary
3) 按照您发布的示例链接进行操作
NSJSONSerialization.dataWithJSONObject(order.toJSON(), options: nil, error: nil)
【讨论】:
如果我想要一系列产品怎么办?我该怎么做?现在它只增加了 1 个产品和 1 个商店。 肯定有几种方法可以做到这一点。您可以在 Order.toJSON() 函数中遍历您的产品数组并将每个产品添加到字典中。有关示例,请参阅我对 Order 对象的编辑。不过,可能需要进行一些重组,具体取决于您希望如何将产品存储在 JSON 对象中。 @Marchu 如果我可以做更多的事情来使这个答案更容易接受,请告诉我。如果此答案满足您的需求,请标记为正确。谢谢!【参考方案2】:向您的类添加一个名为“ToDictionary”的方法,该方法返回一个用您的字段和值手工编码的字典。然后只需在该字典上调用 NSJSONSerialization 即可。在 ObjC 下你可以使用反射,但现在还没有……
【讨论】:
参考这个进行反思 - appventure.me/2015/10/24/swift-reflection-api-what-you-can-do以上是关于如何在 swift 3 中将具有自定义类的数组转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中将数据转换为 Doubles、Ints 和 Strings 等类型?
如何在 Swift 中将数值数据数组转换为 RAW 图像数据?
如何在flutter中将具有文档ID的自定义对象设置为firestore中的集合?
在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。