【问题标题】:Deserializing from JSON to custom object using ObjectMapper使用 ObjectMapper 从 JSON 反序列化到自定义对象
【发布时间】:2016-08-03 07:47:37
【问题描述】:

我在使用 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命名空间

标签: json swift objectmapper


【解决方案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"
...

【讨论】:

  • 谢谢....如果出于某种原因,例如描述为零?所有详细信息对象都返回 nil ...我该如何处理?
  • 将 descriptionDetail 字段更改为可选的 String? 并将其映射到 try descriptionDetail = map.optionalFrom("description") 应该可以解决问题
猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2022-11-15
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多