2017-01-11 4 views
2

以下のjsonをswift 3で作成する必要があり、外部ライブラリを使用したくありません。 私はthis answerを試しましたが、配列内でカスタムクラス(ストアとプロダクト)を使用していますので、動作しません。カスタムクラスの配列を即座にJSON 3に変換するにはどうすればいいですか

"order": 
    [{ 
     "store": 1, 
     "product": [ 
     { 
      "id": 1, 
      "quantity": 1 
     }, 
     { 
      "id": 2, 
      "quantity": 5 
     }] 
    }, 
    { 
     "store": 4, 
     "product": [ { 
      "id": 1, 
      "quantity": 1 
     }, 
     { 
      "id": 3, 
      "quantity": 1 
     }] 
    }] 
} 
+0

可能な複製を掲載例のリンクをクリックしてくださいSwift 3の構造の?](http://stackoverflow.com/questions/40989483/how-to-make-json-from-array-of-struct-in-swift-3) –

答えて

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)あなたは配列からJSONを作るために[方法の

NSJSONSerialization.dataWithJSONObject(order.toJSON(), options: nil, error: nil) 
+0

製品の配列が必要な場合はどうすればよいですか?私はどうすればいいのですか?今は1製品&1店舗しか追加していません。 – Marchu

+0

これを行う方法は間違いありません。 Order.toJSON()関数で商品の配列をループして、各商品を辞書に追加することができます。たとえば、Orderオブジェクトの私の編集を参照してください。 JSONオブジェクトにどのように製品を格納したいかによって、再構成が必要になるかもしれません。 – sargturner

+0

@Marchuもしこれがもっと受け入れられる答えを出すために私ができることがあれば、私に知らせてください。この答えがあなたのニーズを満たしていれば、正しいものとしてマークしてください。ありがとう! – sargturner

0

"ToDictionary"と呼ばれるクラスに、フィールドと値で手作業でコーディングされた辞書を返すメソッドを追加します。次に、その辞書のNSJSONSerializationを呼び出します。 ObjCの下で...あなたは以下でこれをaccmoplishすることができますかなり確信し

+0

これを反射のために参照してください - https: //appventure.me/2015/10/24/swift-reflection-api-what-you-can-do/ – Santosh

関連する問題