![](/img/trans.png)
[英]Nested Arrays throwing error in realm.create(value: JSON) for Swift
[英]Realm + Swift, nested JSON
自從過去2天以來我遇到了問題。 我無法將我的JSON轉換為Realm對象。
我有一個像下面這樣的json:
{
"gender" : "male",
"id" : "123456789",
"age_range" : {
"min" : 21
},
"last_name" : "LastName"
}
我有這個領域模型:
class UserObject: Object {
dynamic var userId: String = ""
dynamic var lastName: String?
dynamic var gender: String?
var ageRange = List<AgeRangeObject>()
required convenience init?(_ map: Map) {
self.init()
}
}
class AgeRangeObject: Object {
dynamic var min: Int = 0
}
以及我嘗試使用ObjectMapper創建此模型的實例以將json解析為字典然后創建模型實例的方式:
let userJSONModel = Mapper<User>().map(jsonString)
let realm = try! Realm()
do {
try realm.write {
let dict: [String : AnyObject] = [
"userId" : (userJSONModel?.userId)!,
"ageRange" : (userJSONModel?.ageRange)!,
"lastName" : (userJSONModel?.lastName)!,
"gender" : (userJSONModel?.gender)!
]
let userModel = UserObject(value: dict)
realm.add(userModel)
}
} catch {
print("Exception")
}
問題出現在這一行: let userModel = UserObject(value: dict)
我得到了以下錯誤:
*** Terminating app due to uncaught exception 'RLMException', reason: 'Invalid value 'min' to initialize object of type 'AgeRangeObject': missing key 'min''
我正在查看stackoverflow:
嵌套數組在Swift的realm.create(value:JSON)中拋出錯誤
如何使用嵌套的NSDate屬性將Realm對象轉換為JSON?
但我的情況有所不同。 你知道那個年齡段字典有什么問題嗎? 為什么它不能很好地解析它? 謝謝。
在您的JSON中, ageRange
是一個字典,而UserObject.ageRange
屬性是List<AgeRangeObject>
。 你有不匹配的模型。
您需要更新模型以反映JSON的結構:
var ageRange = List<AgeRangeObject>()
變
dynamic var ageRange: AgeRangeObject? = nil
反之亦然,更新您的JSON以反映模型的結構:
{
"gender" : "male",
"id" : "123456789",
"age_range" : [{
"min" : 21
}],
"last_name" : "LastName"
}
{
"key1" : "value1",
"key2" : "value2",
"array1" : [{
"key" : value
}],
"key3" : "value3"
}
為此,您可以使用ObjectMapper的TransformType。
參考: https : //github.com/APUtils/ObjectMapperAdditions
我的代碼:
@objcMembers class RealmObject: Object, Mappable {
dynamic var listValues = List<MyRealmObject>()
required convenience init?(map: Map) {
self.init()
}
// Mappable
func mapping(map: Map) {
listValues <- (map["listValues"], RealmlistObjectTransform())
}
}
@objcMembers class MyRealmObject: Object, Mappable {
required convenience init?(map: Map) {
self.init()
}
// Mappable
func mapping(map: Map) {
}
}
class RealmlistObjectTransform: TransformType {
typealias Object = List<MyRealmObject> // My Realm Object here
typealias JSON = [[String: Any]] // Dictionary here
func transformFromJSON(_ value: Any?) -> List<MyRealmObject>? {
let list = List<MyRealmObject>()
if let actors = value as? [[String: Any]] {
let objects = Array<MyRealmObject>(JSONArray: actors)
list.append(objectsIn: objects)
}
return list
}
func transformToJSON(_ value: List<MyRealmObject>?) -> [[String: Any]]? {
if let actors = value?.sorted(byKeyPath: "").toArray(ofType: MyRealmObject.self).toJSON() {
return actors
}
return nil
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.