如何在ObjectMapper中映射JSON词典?

Swi*_*yJD 5 ios swift alamofire objectmapper

我有看起来像这样的json数据:

{
  "balance": {
    "pointsEarned": 3,
    "pointsAvailable": 3,
    "pointsOnHold": 0,
    "pointsConsumed": 0,
    "nextReward": 6
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试映射“余额”,以便可以获取其他值:

class AccountBalance: Mappable {

  var balance: Dictionary<String, AnyObject>?
   var pointsAvailable: Int?

  required init?(_ map: Map) {

  }

  func mapping(map: Map) {

    balance <- map["balance.value"]
    pointsAvailable <- map ["pointsAvailable"]
  }
}
Run Code Online (Sandbox Code Playgroud)

根据objectMapper github页面,它是这样完成的:

ObjectMapper支持键内的点表示法,以便轻松映射嵌套对象。给定以下JSON字符串:

"distance" : {
     "text" : "102 ft",
     "value" : 31
}
Run Code Online (Sandbox Code Playgroud)

您可以按以下方式访问嵌套对象:

func mapping(map: Map) {
    distance <- map["distance.value"]
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试访问“余额”时,都会得到零。知道我做错了什么吗?

Luk*_* In 4

请注意,在您链接到的示例中,distance有一个value属性,可以通过以下方式访问map["distance.value"]

"distance" : {
     "text" : "102 ft",
     "value" : 31
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,balance没有名为 的子字段value,因此map["balance.value"]将会失败。

用于map["balance"]balance变量映射到字典:

class AccountBalance: Mappable {

    var balance: Dictionary<String, AnyObject>?
    var pointsAvailable: Int?

    required init?(_ map: Map) {
    }

    func mapping(map: Map) {

        balance <- map["balance"]
        pointsAvailable <- map ["pointsAvailable"]
    }
}
Run Code Online (Sandbox Code Playgroud)