gpt4 book ai didi

json - 如何使用 swift 4.1 codable(json 解码)过滤无效数据

转载 作者:行者123 更新时间:2023-11-28 09:29:00 24 4
gpt4 key购买 nike

我开始了解 swift 4.0 中的结构“Codable”,*。所以,我在解码 josn 时尝试了这一点。

if let jsonData = jsonString.data(using: .utf8) {
let decodingData = try? JSONDecoder().decode(SampleModel.self, from: jsonData)
}

示例数据模型如下。

struct SampleModel : Codable {
var no: Int?
var category: Int?
var template_seq: Int?
}

样本 json 数据在..下面。

{
"data": {
"result" : 1
"total_count": 523,
"list": [
{
"no": 16398,
"category" : 23,
"template_seq" : 1
},
{
"no": -1,
"category" : 23,
"template_seq" : 1
}
]
}
}

但是我想过滤错误的数据。如果“no”的值小于等于0,则为无效值。

在不使用 codable 之前......如下。(使用 Alamifre ison 响应)

guard let dictionaryData = responseJSON as? [String : Any]  else { return nil }

guard let resultCode = dictionaryData["result"] as? Bool , resultCode == true else { return nil }

guard let theContainedData = dictionaryData["data"] as? [String:Any] else { return nil }

guard let sampleListData = theContainedData["list"] as? [[String : Any]] else { return nil }

var myListData = [MyEstimateListData]()

for theSample in sampleListData {
guard let existNo = theSample["no"] as? Int, existNo > 0 else {
continue
}
myListData.append( ... )
}

return myListData

如何使用swift 4.0 Codable过滤错误数据或无效数据??

最佳答案

您可以为初始响应制作可编码

这是您的模型:

import Foundation

struct Initial: Codable {
let data: DataModel?
}

struct DataModel: Codable {
let result, totalCount: Int
let list: [List]?

enum CodingKeys: String, CodingKey {
case result
case totalCount = "total_count"
case list
}
}

struct List: Codable {
let no, category, templateSeq: Int

enum CodingKeys: String, CodingKey {
case no, category
case templateSeq = "template_seq"
}
}

extension Initial {
init(data: Data) throws {
self = try JSONDecoder().decode(Initial.self, from: data)
}
}

然后像那样使用它:

if let initail  = try? Initial.init(data: data) , let list = initail.data?.list {
var myListData = list.filter { $0.no > 0 }
}

关于json - 如何使用 swift 4.1 codable(json 解码)过滤无效数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50433356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com