Ios 如何使用Codable解析子reddits JSON
我使用的URL将为您提供Reddit子Reddits的JSON格式 我的可编码结构模型如下:Ios 如何使用Codable解析子reddits JSON,ios,swift,xcode,codable,Ios,Swift,Xcode,Codable,我使用的URL将为您提供Reddit子Reddits的JSON格式 我的可编码结构模型如下: struct SubredditsData: Codable { let data: SubredditData } struct SubredditData: Codable { let children: [Children] } struct Children: Codable { let data: ChildrenData } struct ChildrenDat
struct SubredditsData: Codable {
let data: SubredditData
}
struct SubredditData: Codable {
let children: [Children]
}
struct Children: Codable {
let data: ChildrenData
}
struct ChildrenData: Codable {
let title: String
let icon_img: String
let display_name_prefixed: String
let name: String
}
当然还有Subreddit的模型
struct SubredditsModel {
let title: String
let display_name_prefixed: String
let name: String
}
然后我执行了一个请求和实际的解析本身
func parseSubRedditsJSON(_ subredditsRawData: Data) -> [SubredditsModel]? {
let decoder = JSONDecoder()
do {
var subReddits = [SubredditsModel]()
let decodedData = try decoder.decode(SubredditsData.self, from: subredditsRawData)
let data = decodedData.data
let children = data.children
for item in children {
let childrenData = item.data
let title = childrenData.title
let display_name_prefixed = childrenData.display_name_prefixed
let name = childrenData.name
let subReddit = SubredditsModel(title: title, display_name_prefixed: display_name_prefixed, name: name)
subReddits.append(subReddit)
}
return subReddits
} catch {
subredditsDelegate?.didFailWithError(error: error)
return nil
}
}//end of parseSubRedditsJSON
我通过协议委托将数据从请求管理器返回到视图控制器,该委托工作正常。问题是我在这条线上出错了
let decodedData = try decoder.decode(SubredditsData.self, from: subredditsRawData)
错误显示:
valueNotFound(Swift.String, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil),
CodingKeys(stringValue: "children", intValue: nil), _JSONKey(stringValue: "Index 5", intValue: 5),
CodingKeys(stringValue: "data", intValue: nil),
CodingKeys(stringValue: "icon_img", intValue: nil)],
debugDescription: "Expected String value but found null instead.", underlyingError: nil))
我一定是遗漏了什么,或者没有使用Swift codable实现正确的解析方法。由于某些字段不是可选的,它可能需要字符串类型或null,将其设置为可选将解决此问题
struct SubredditsData: Codable {
let data: SubredditData
}
struct SubredditData: Codable {
let children: [Children]
}
struct Children: Codable {
let data: ChildrenData
}
struct ChildrenData: Codable {
let title: String?
let icon_img: String?
let display_name_prefixed: String?
let name: String?
}
如果仔细阅读,错误说明了一切,icon\u img可以为null,并且必须声明为可选,让icon\u img:String?或者你可以简单地删除它,如果你不使用它哇,我不会注意到这一点。谢谢你,伙计!为什么所有字段都是可选的?