使用ObjectMapper从JSON反序列化为自定义对象
问题描述:
我有使用ObjectMapper将JSON数据反序列化为自定义对象的问题。使用ObjectMapper从JSON反序列化为自定义对象
的结构是这样的:
{
"message": "",
"payload": [
{
"details": {
"id": "7758931",
"description": "A description",
...
我的代码:
struct MyObject : Mappable
{
var message : String
var payload : [MyDetail]?
init(map: Mapper) throws
{
try message = map.from("message")
payload = map.optionalFrom("payload") ?? nil
}
}
struct MyDetail : Mappable
{
var detailId : String
var descriptionDetail : String
init(map: Mapper) throws
{
try detailId = map.from("id")
try descriptionDetail = map.from("description")
}
}
显然,这是不正确的,因为有字典,一个关键细节解析...
任何人有一个想法,我可以解析这个?
答
你需要一个容器对象,因为它是嵌套在details
键下一个包装的细节,像这样:
struct MyObject : Mappable {
var message : String
var payload : [MyDetailContainer]?
init(map: Mapper) throws {
try message = map.from("message")
payload = map.optionalFrom("payload") ?? nil
}
}
struct MyDetailContainer : Mappable {
var details: MyDetail
init(map: Mapper) throws {
try details = map.from("details")
}
}
struct MyDetail : Mappable {
var detailId : String
var descriptionDetail : String
init(map: Mapper) throws
{
try detailId = map.from("id")
try descriptionDetail = map.from("description")
}
}
假设JSON这样下去是这样的:
{
"message": "",
"payload": [
{
"details": {
"id": "7758931",
"description": "A description"
},
},
{
"details": {
"id": "7758932",
"description": "Description #2"
...
你错过'details'命名空间 –