vacio initialize for empty declarar array arrays json swift serialization swift3

arrays - initialize - Cómo hacer JSON desde Array of Struct en Swift 3?



swift 4 declare array (1)

Si desea crear JSON a partir de un objeto personalizado, primero debe convertir su objeto personalizado en Dictionary , de modo que realice una función como la siguiente en su estructura ProductObject .

func convertToDictionary() -> [String : Any] { let dic: [String: Any] = ["prodID":self.prodID, "prodName":self.prodName, "prodPrice":self.prodPrice, "imageURL":self.imageURL, "qty":qty, "stock":stock, "weight":weight] return dic }

Ahora usa esta función para generar Matriz de diccionario desde la Matriz del objeto personalizado ProductObject .

private var productsArray = [ProductObject]() let dicArray = productsArray.map { $0.convertToDictionary() }

Aquí dicArray está hecho de tipo [[String:Any]] , ahora puede usar JSONSerialization para generar una cadena JSON partir de este dicArray .

if let data = try? JSONSerialization.data(withJSONObject: dicArray, options: .prettyPrinted) { let str = String(bytes: data, encoding: .utf8) print(str) }

Tengo un problema para hacer un JSON desde una matriz de struct en Swift3 . Busqué en Stack Overflow , nada me ayudó (aquí la captura de pantalla ). Tengo una struct como esta:

public struct ProductObject { var prodID: String var prodName: String var prodPrice: String var imageURL: String var qty: Int var stock: String var weight: String init(prodID: String, prodName: String, prodPrice: String, imageURL: String, qty: Int, stock: String, weight: String){ self.prodID = prodID self.prodName = prodName self.prodPrice = prodPrice self.imageURL = imageURL self.qty = qty self.stock = stock self.weight = weight } }

y la matriz de esa estructura:

private var productsArray = [ProductObject]()

Cuando la matriz no está vacía, y luego traté de imprimirla en otra clase, muestra esto en el depurador:

[app.cartclass.ProductObject(prodID: "2", prodName: "produk 2", prodPrice: "IDR 1000000", imageURL: "someURL", qty: 1, stock: "11", weight: "200")]

La matriz no es un JSON object válido. ¿Cómo hacer que sea un objeto JSON válido? Y me pregunto si esta parte "app.cartclass.ProductObject" es un problema o no para convertirlo en un JSON object válido.

editar:

Así es como serializo en un JSON :

var products = [String:Any]() for j in 0 ..< cart.numberOfItemsInCart() { products=["/(j)":cart.getAllProduct(atIndex: j)] } if let valid = JSONSerialization.isValidJSONObject(products) { do { let jsonproducts = try JSONSerialization.data(withJSONObject: products, options: .prettyPrinted) as! [String:Any] //print(jsonproducts) } catch let error as NSError { print(error) } } else { print("it is not a valid JSON object"); }