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");
}