2016-08-24 115 views
0

我有一个问题以来,最近2天。我无法将我的JSON转换为Realm对象。Realm + Swift,嵌套JSON

我有一个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'' 

我一直在寻找的计算器:

Nested Arrays throwing error in realm.create(value: JSON) for Swift

How to convert Realm object to JSON with nested NSDate properties?

,但我的情况是不同的。 你知道那个年龄段词典有什么问题吗?为什么它不能很好地解析它? 谢谢。

回答

2

在您的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" 
} 
+0

非常感谢你! :)现在我开悟了;)我认为Realm文档并不清楚这种情况。 – PiotrCh