在Swift

时间:2018-08-07 20:19:56

标签: json swift xcode web-services

我正在通过URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error)从Swift的Web服务器获取值,我得到的输出类似于:

(
    {
    ANO = 2017;
    CLAVESSAMEDICAMENTO = "010.000.0101.00";
    CLUES = BSSSA000035;
    CONSUMOPROMEDIOMENSUAL = 87;
    DESCRIPCIONMEDICAMENTO = "\U00c1CIDO ACETILSALIC\U00cdLICO TABLETAS";
    MES = 01;
    MUNICIPIO = "Comond\U00fa";
    NOMBREUNIDAD = "C.S.U. CIUDAD CONSTITUCION";
    PRESENTACION = "ENVASE CON 20 TABLETAS";
    RECETADOMENSUAL = 280;
    SURTIDOMENSUAL = 252;
    id = 1867;
},
    {
    ANO = 2017;
    CLAVESSAMEDICAMENTO = "010.000.0103.00";
    CLUES = BSSSA000035;
    CONSUMOPROMEDIOMENSUAL = 70;
    DESCRIPCIONMEDICAMENTO = "ACIDO ACETILSALICILICO TABLETA SOLUBLE";
    MES = 01;
    MUNICIPIO = "Comond\U00fa";
    NOMBREUNIDAD = "C.S.U. CIUDAD CONSTITUCION";
    PRESENTACION = "ENVASE CON 20 TABLETAS";
    RECETADOMENSUAL = 240;
    SURTIDOMENSUAL = 216;
    id = 1879;
},
    {
    ANO = 2017;
    CLAVESSAMEDICAMENTO = "010.000.0104.00";
    CLUES = BSSSA000035;
    CONSUMOPROMEDIOMENSUAL = 42;
    DESCRIPCIONMEDICAMENTO = "PARACETAMOL TABLETA";
    MES = 01;
    MUNICIPIO = "Comond\U00fa";
    NOMBREUNIDAD = "C.S.U. CIUDAD CONSTITUCION";
    PRESENTACION = "ENVASE CON 10 TABLETAS";
    RECETADOMENSUAL = 743;
    SURTIDOMENSUAL = 669;
    id = 1891;
},
    {...

我正在尝试在一个类中对其进行解码,以便可以访问它的值。我的课是:

struct Informacion: Codable {
    let id: String
    let clues: String
    let nombreunidad: String
    let municipio: String
    let clavesmedicamentos: String
    let descripcionmedicamentos: String
    let presentacion: String
    let consumopromediomensual: Int
    let recetadomensual: Int
    let surtidomensual: Int
    let mes: String
    let ano: String
    enum CodingKeys : String, CodingKey {
        case id = "id"
        case clues = "CLUES"
        case nombreunidad = "NOMBREUNIDAD"
        case municipio = "MUNICIPIO"
        case clavesmedicamentos = "CLAVESSAMEDICAMENTO"
        case descripcionmedicamentos = "DESCRIPCIONMEDICAMENTO"
        case presentacion = "PRESENTACION"
        case consumopromediomensual = "CONSUMOPROMEDIOMENSUAL"
        case recetadomensual = "RECETADOMENSUAL"
        case surtidomensual = "SURTIDOMENSUAL"
        case mes = "MES"
        case ano = "ANO"
    }
}

但是我不知道如何解码JSON值以适合我的课程。我试图用另一个值作为另一个类的数组来创建另一个类,例如:

struct Unidades_Informacion: Codable {
    let valores: Array<Informacion>
}

但是我得到了

  

线程6:致命错误:“尝试!”表达式意外引发错误:Swift.DecodingError.typeMismatch(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[],debugDescription:“预期对Dictionary进行解码,但找到了一个数组。”,底层错误:无))

1 个答案:

答案 0 :(得分:2)

很明显,这是一个数组,您可以尝试

do {
     let arr = try JSONDecoder().decode([Informacion].self,data)
 }
 catch {
   print(error)
}

删除结构Unidades_Informacion,它与此json没有关系,这是一个数组

[{},{},{}]    // (2) but you have this

这是一本字典

{"valores": [{},{},{}]}   /// (1) you attempt with this