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 the
List`.
所以你的代码
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
属性.
所以我有以下 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 the
List`.
所以你的代码
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
属性.