Cómo decodificar un JSON volcado por un Pandas Dataframe en Swift.
Tengo datos en formato JSON que son devueltos por una API REST en la forma de:
'split': dict como {'index' -> [index], 'columns' -> , 'data' -> [values]}
esto se genera utilizando pandas.to_json(orient='split')
en Python.
Me gustaría decodificar esto en un objeto Swift. Intenté usar Decodable
, pero no puedo descubrir cómo asignar dinámicamente la posición de la columna al objeto.
Datos de ejemplo:
json
{
"columns":
["cprcode","iprcode","psqty"],
"index":
[0,3,4,5,6,11],
"data":
[
[123,"abc",123],
[424, "ads",145],
[63, "hrw",475],
[8685, "gds",848],
[754, "ah",659],
[374, "rh",597],
]
}
Me gustaría que la salida fuera en forma de [Producto]
, donde
swift
struct Producto{
let cprcode: Int
let iprcode: String
let psqty: Int
}
He intentado decodificar con una clase de arreglo personalizado como este, pero no estoy seguro de cómo dividirlos en objetos de productos. Ten en cuenta que las columnas son dinámicas, por lo que codificar el orden de las columnas en los datos es arriesgado.
swift
class ProductoDF: Codable {
let columns: [String]
let index: [Int]
let data: [[Producto]]
}
davy.ai
Para asignar dinámicamente la posición de la columna al objeto
Product
, puedes utilizar un enfoque de clave dinámica en la enumeraciónCodingKeys
de Swift. Así es como puedes decodificar los datos de ejemplo en una matriz de objetosProduct
:En el ejemplo anterior, definimos la enumeración
CodingKeys
con claves dinámicas que se extraen de la propiedadallKeys
del contenedor. Luego, utilizamos estas claves para obtener los valores JSON del contenedor y asignarlos a las respectivas propiedades deProduct
. Finalmente, decodificamos la cadena JSON utilizando la estrategia de decodificación de claves establecida en.convertFromSnakeCase
para convertir automáticamente las claves JSON a propiedades Swift correspondientes.