如何在swift 3中将自定义类的数组转换为JSON

时间:2017-01-11 18:43:44

标签: arrays json swift swift3

我需要在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 
        }]
    }]
}

2 个答案:

答案 0 :(得分:2)

非常确定您可以使用以下内容来表达这一点:

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 :(得分:0)

为名为“ToDictionary”的类添加一个方法,该方法返回一个用字段和值手工编码的字典。然后在该字典上调用NSJSONSerialization。在ObjC下你可以使用反射,但那里还没有......