【问题标题】:Swift Alamofire migration parsing JSONSwift Alamofire 迁移解析 JSON
【发布时间】:2017-06-12 21:22:48
【问题描述】:

在迁移到最新版本时,我发现很难在 Swift 3 中使用 Alamofire 4 解析从 JSON 中获取和打印姓名、年龄和出生日期等字段。

JSON 格式

"SetValues": {   
"data":
[
  {
    "Name": yyyyy ,
    "Age": 13,
    "DOB": "2017-06-08",
  }

  {
    "Name": xxxx ,
    "Age": 33,
    "DOB": "2015-06-08",
  }
]
}

我试过了

Alamofire.request(url!,
                      method: .post,
                      parameters: nil,
                      encoding: JSONEncoding.default,
                      headers: headers)

        .responseJSON{ response in

                  let datamsg = jsonmsg?["SetValues"] as? [String : Any]

                  let dataset = datamsg?["data"] as? [String : Any]
                  let setValues = datamsg?["data"]
                  print (setValues[0]["Name"] as Any)
              }

【问题讨论】:

  • 显示你迄今为止尝试过的内容
  • 我试过 Alamofire.request(url!, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers) .responseJSON{ response in let datamsg = jsonmsg?["SetValues" ] 作为? [String : Any] 让 dataset = datamsg?["data"] as? [String : Any] let setValues = datamsg?["data"] print (setValues[0]["assetDateId"] as Any);
  • 把它放在问题中。
  • 那么当你运行你的代码时会发生什么? jsonmsg 是什么?它没有在您的代码中定义。
  • dataset 是一个数组(字典),而不是字典,所以你不能做as? [String : Any],它至少应该是as? [Any],在你的情况下是as? [[String: Any]]

标签: ios swift alamofire


【解决方案1】:

问题出在这一行

let dataset = datamsg?["data"] as? [String : Any]

从 JSON 响应字符串中可以看出,它应该如下所示

let dataset = datamsg?["data"] as? [[String : Any]]

let name = dataset?[0]["Name"] as? String

【讨论】:

  • 感谢大家的时间和努力。我最终得到的解决方案是:Any 成员的类型不能带下标,所以如果我需要索引值来遍历解析的 json,我必须将初始 Json 响应转换为字典然后找到数据部分并用作? [字符串:任意]。
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
相关资源
最近更新 更多