快速将数据解析为自定义数据对象

Posted

技术标签:

【中文标题】快速将数据解析为自定义数据对象【英文标题】:Parse data to custom data object in swift 【发布时间】:2018-03-14 10:03:58 【问题描述】:

我正在尝试在 swift 4 中使用 codable 将 comming 数据解析为自定义对象,但仍然不知道确切。 这是我的自定义类:

class  Response_Model : Codable 
var id : String?
var code : String?

enum CodingKeys: String, CodingKey 

    case id = "id"
    case code = "code"



init()

    id = ""
    code = ""




required init(from decoder: Decoder) throws 
    let values = try decoder.container(keyedBy: CodingKeys.self)
    id = try values.decodeIfPresent(String.self, forKey: .id)
    code = try values.decodeIfPresent(String.self, forKey: .code)



func encode(with aCoder: NSCoder) 
    aCoder.encode(id, forKey: "id")
    aCoder.encode(code, forKey: "code")

在这里我试图解析共鸣:

responseModel = try jsonDecoder.decode([Response_Model].self, from: result as! Data)

这是回应:

[

    "id": "38",
    "code": "code1"
,

    "id": "39",
    "code": "code2"
]

谢谢

【问题讨论】:

你的问题是什么? 解码没有成功完成? 首先你必须像这样使用 -> class Response_Model : NSObject, Codable 第二件事是问清楚的问题。 在操场上使用上面的代码,我可以成功地将 JSON 解码为模型并打印出每个值。 【参考方案1】:

你的代码太繁琐了,Codable协议提供的大部分样板代码都是免费的。

类可以简化为(顺便说一句,在大多数情况下struct 就足够了)

struct ResponseModel : Codable 
    var id : String
    var code : String

现在解码 JSON

let jsonString = """
  [
   "id": "38", "code": "code1",
   "id": "39", "code": "code2"
  ]
"""

do 
    let data = Data(jsonString.utf8)
    let result = try  JSONDecoder().decode([ResponseModel].self, from: data)
    for item in result 
        print(item.code, item.id)
    
 catch  print(error) 

【讨论】:

以上是关于快速将数据解析为自定义数据对象的主要内容,如果未能解决你的问题,请参考以下文章

尝试将变量保存为自定义解析对象列表(UserRecipe)并将它们打印到 xcode 控制台

python json快速解析命令

Swift之深入解析如何将代码添加为自定义LLDB命令

解析 JSON 文件(本地存储),从而快速创建对象数组

将 pandas 数据框转换为自定义 JSON 格式(然后转换为 JS 对象)

求大神解释:怎么将fastjson数据解析成自定义对象?详情如下: