json - 在 Swift 中解码具有多个组值的 JSON

标签 json swift xcode web-services

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

(
    {
    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;
},
    {...

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

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 值以适合我的类(class)。我试图从另一个类创建另一个具有单个值的类作为数组,例如:

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

但是我得到:

Thread 6: Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary but found an array instead.", underlyingError: nil))

最佳答案

很明显是数组,你可以试试

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

去掉struct Unidades_Informacion 它和这个json没有关系,这是一个数组

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

虽然这是一本字典

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

关于json - 在 Swift 中解码具有多个组值的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734790/

相关文章:

python - Xcode 中的纯 Python?

java - 使用 spring 框架将 Java 对象中的顺序保存为 json

swift - 如何在 Swift 中设置 UILabel 文本周围的阴影轮廓(实心)?

iphone - 此类对于键 authView 不符合键值编码

iphone - 如何创建像“设置”-“Safari”-“清除历史记录”中那样的多级弹出提示?

ios - 在 swift 中自动更新 var update 处的 UILabel

java - 如何使用 AJAX 查询动态填充 Google Chart,获取 DOM 异常 8

c# - 无法将类型 'System.Web.Mvc.RedirectToRouteResult' 隐式转换为 'System.Web.Mvc.JsonResult'

JSON 包含负 ("-") char : is this valid/standard?

swift - Xcode Swift 使用警报执行 segue