2016-08-11 32 views
-1

我需要創建JSON這樣的,但我的代碼無法正常工作:如何轉換結構,以JSON斯威夫特

{ 
    "room": "string", 
    "products": [{ 
     "name": "string", 
     "quantity": 0 
    }], 
    "observations": "string", 
    "date": "dd-mm-yyyy hh:mm:ss" 
}

我需要這個結構轉化爲JSON,我的代碼是:


struct Products: JSONSerializable { 
    let name: String 
    let quantity: Int 
} 
struct Pedido: JSONSerializable{ 
    let room: String 
    let products: Array 
    let observations: String 
    let date: NSDate 
} 

此代碼不能正常工作,在日誌返回nil:


let JSONPedido = Pedido(room: receivedString, 
         products: products, 
         observations: observationString!, 
         date: date).ToJSON() 
+0

檢查:http://www.sthoughts.com/2016/06/30/swift-3-serializing-swift-structs-to-json/和http://codelle.com/blog/2016/5/an-easy-way-to-convert-swift-structs-to-json/ –

+1

'JSONSerializable'不是Swift的一部分。如果你使用的是像Alamofire這樣的第三方庫,你應該在你的問題中解釋一下(使用[edit]鏈接)。我想你的非工作'.ToJSON()'也來自它。 – Moritz

回答

0

對於結構也可以創建一個變量,將作爲一個字典再版表示結構值。在這種情況下,它看起來像這樣:

struct Pedido { 
    let room: String 
    let products: Array 
    let observations: String 
    let date: NSDate 
    var pedidoJSON: [String: AnyObject] { 
     return ["room" : room, "products": products, "observations": observations, "date": date] 
    } 
} 

然後,當您需要JSON值時,您可以像這樣訪問它。

//assuming you already have a pedido instance 
let pedidoJson = pedidoInstance.pedidoJSON 
+0

嗨,謝謝。我不能創建pedidoJSON os結構...這個參數「let」聲明不能被計算屬性 –

+1

對不起,計算的屬性必須是變量! – pbush25

+0

@ pbush25你的解決方案有效,但你不覺得OP應該使用JSONSerializable,因爲它們已經符合它了嗎?或者如果他們不使用它,他們不應該遵守它:... p – Moritz