ios - Swift 5 Alamofire 字典解析错误
问题描述
我想在 Swift 5 中用 Alamofire 解析 json,但我没有得到下面的代码。
我的 json 文件
[{"type":"success","data":[{"id":"1","sectionId":"1","title":"test title","detail":"detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text ","image":"test.jpg","view":"0","status":"1"}]}]
我的 Swift 5 代码
if let json = response.result.value {
print(json)
if let dictionaryArray = json as? Dictionary<String, AnyObject?> {
print(dictionaryArray)
let json = dictionaryArray
if let type = json["type"] as? String,
let results = json["data"] as? Array<Dictionary<String, AnyObject?>> {
print(type)
for i in 0..<results.count{
let json = results[i]
if let id = json["id"] as? String, let jokeString = json["title"] as? String{
self.items.append(Item(id: id, sectionId : "0", title: jokeString, detail:"", image: "", view : "0", status : "0"))
print(json)
}
}
}
}
}
}
任何想法?我在哪里犯了错误?
解决方案
根是一个数组,所以它的[[String:Any]]
if let dictionaryArray = json as? [[String:Any]] {
顺便说一句,它更好用Codable
Alamofire.request(url, method: .get, parameters: [:], encoding: JSONEncoding.default, headers: [:]).responseData { res in
guard let data = res.data else { return }
do {
let res = try JSONDecoder().decode([Root].self, from:data)
print(res)
}
catch {
print(error)
}
}
struct Root: Codable {
let type: String
let data: [Datum]
}
// MARK: - Datum
struct Datum: Codable {
let id, sectionID, title, detail: String
let image, view, status: String
enum CodingKeys: String, CodingKey {
case id
case sectionID = "sectionId"
case title, detail, image, view, status
}
}
编辑:
if let dictionaryArray = json as? [[String:Any?]] {
for item in dictionaryArray {
if let type = item["type"] as? String,let results = item["data"] as? [[String:Any?]] {
print(type)
for json in results {
if let id = json["id"] as? String, let jokeString = json["title"] as? String {
self.items.append(Item(id: id, sectionId : "0", title: jokeString, detail:"", image: "", view : "0", status : "0"))
print(json)
}
}
}
}
}
推荐阅读
- reactjs - 你可以将 Sketch 中的 Material 主题直接导出到 React 吗?
- keras - Keras 张量板回调不保存训练/验证精度
- python - 在 webbrowser.get(chrome_path).open(url) 之后没有执行 Python 代码
- c - C中的Printf函数直到while循环完成才打印
- python - 基于列和索引标题的返回值
- json - 如何使用 Dart 的方法和数据向外部 API 发布信息
- reactjs - 文件上传时重置状态
- qt - 如何将时间的 QStringList 转换为 QList
? - angular - 获取 s3 存储桶中对象的标签列表
- reactjs - 有没有办法在本机反应中设置具有相似模式的备用行的视图样式