2016-08-03 183 views
0

我有使用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") 
    } 
} 

显然,这是不正确的,因为有字典,一个关键细节解析...

任何人有一个想法,我可以解析这个?

+0

你错过'details'命名空间 –

回答

1

你需要一个容器对象,因为它是嵌套在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" 
... 
+0

谢谢....如果由于某种原因例如说明是零?所有的细节对象返回零...我怎么能处理这个? – jerrygdm

+1

将'descriptionDetail'字段更改为可选的'String?',并将其映射为'try descriptionDetail = map.optionalFrom(“description”)'应该这样做 – nosyjoe