Objectmapper 获取 JSON 内的一项数组

Objectmapper get array of one item within JSON

所以我有以下 JSON,我将其与 ObjectMapper 和 Realm 一起使用。

{
  "result": [
    {
      "id": 20,
      "types": [
        "now"
      ],
      "url": "/nl/whereto/ezrhgerigerg",
      "categories": [
        {
          "id": 39,
          "name": "Food "
        },
        {
          "id": 21,
          "name": "Varia"
        }
      ]
    },

我的问题是从 "types" 获取数据,对于数组中的某些项目来说是 "now" 或 "later",而对于其他项目来说是空的(因此,没有类型项目已给出)。

我尝试在映射中执行以下操作:

class Publication: Object, Mappable {
    dynamic var id:Int = 0
    var typez  = List<getType>()
    dynamic var url:String?

    required convenience init?(_ map: Map) {
        self.init()
    }

    override static func primaryKey() -> String? {
        return "id"
    }

    func mapping(map: Map) {
        id <- map["id"]
        typez <- map["types"]
        url <- map["url"]
    }
}

class getType: Object, Mappable {
    dynamic var text: String = ""


    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        text <- map[""]
    }
}

当我查看 Realm 数据库时,您可以看到创建了一个 [getType] 数组 typez,但它对于所有项目都是空的(即使是类型为 "now" 的项目)。另外两项(id和url)填入数据库

我做错了什么,它不会保存到数据库中?

因为 Realm 无法检测分配 List 属性,因为 List 属性 不是 Objective-C 类型。所以 List 属性应该声明为 let,而不应该是 nil。您应该使用 append/remove.../insert...method to modifying theList`.

所以你的代码

typez <- map["types"]

不起作用,因为您直接将值分配给 typez 属性。

解决方法如下:

func mapping(map: Map) {
    ...
    var typez: [String]? = nil
    typez <- map["types"]

    typez?.forEach { t in
        let obj = getType()
        obj.text = t
        self.typez.append(obj)
    }
    ...

首先,将映射值存储到局部变量(它是字符串数组)。然后将字符串数组转换为对象。然后将对象附加到 List 属性.