【发布时间】:2019-07-13 22:23:16
【问题描述】:
我有一个 JSON 作为
{
"code": 200,
"status": "success",
"data": [
{
"cardTypeId": 1,
"cardInfo": {
"background": "#4267b2",
"userName": "abkur_rt",
"text": "Hello Video",
"media": {
"mediaUrl": "",
"mediaType": "image",
"mediaThumbUrl": ""
}
}
},
{
"cardTypeId": 4,
"cardInfo": {
"text": "Image and text",
"media": {
"mediaUrl": "",
"mediaType": "image",
"mediaThumbUrl": ""
}
}
}
]
}
为了解析这个我使用了 ObjectMapper(https://github.com/tristanhimmelman/ObjectMapper)
我的查询是在我的 JSON 中我得到 cardInfo 取决于 cardTypeId 所以我创建了引用此链接 ObjectMapper how to map different object based on JSON 的类,以了解如何为类使用自定义 TransformType。在链接的 JSON 响应中有 Array,但在我的情况下,如果 cardTypeId 为 1,那么还有 2 个额外的字段,与 cardInfo 中的所有内容相同。所以我做了如下的类,但我不确定我将如何创建继承 TransFormType 的类。
class LBDetailsList: Mappable {
var lbListArray : [LBDetail]?
required init?(map: Map) {
}
func mapping(map: Map) {
lbListArray <- map ["data"]
}
}
class LBDetail: Mappable {
var cardTypeID : Int?
var cardInfo: LBBaseCardInfo?
required init?(map: Map) {
}
func mapping(map: Map)
{
cardInfo <- map["cardInfo"]
}
}
class LBBaseCardInfo: Mappable {
var text: String?
var media: LBMedia?
required init?(map: Map) {
}
func mapping(map: Map) {
text <- map["text"]
media <- map["media"]
}
}
class CardType1: LBBaseCardInfo {
var background, userName : String?
required init?(map: Map) {
super.init(map: map)
}
override func mapping(map: Map) {
super.mapping(map: map)
background <- map["background"]
userName <- map["userName"]
}
}
class CardType2: LBBaseCardInfo {
required init?(map: Map) {
super.init(map: map)
}
override func mapping(map: Map) {
super.mapping(map: map)
}
}
class LBMedia: Mappable {
var mediaURL: String?
var mediaType: String?
var mediaThumbURL: String?
required init?(map: Map) {
}
func mapping(map: Map) {
mediaURL <- map["mediaUrl"]
mediaType <- map["mediaType"]
mediaThumbURL <- map["mediaThumbUrl"]
}
}
请帮助我理解这个框架。
【问题讨论】:
-
在 Swift 4+ 中,所有用于将 JSON 解析为对象的第三方库都已过时,取而代之的是
Codable协议。我们鼓励您放弃ObjectMapper并使用Codable。 -
感谢您的通知,但我现在必须继续这样做,然后肯定会在不久的将来进行更改。
-
我现在就改变。使用
Codable可以更轻松地解码不同类型
标签: json swift objectmapper