2016-08-24 12 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)

Я получаю ошибку folowing:

*** Terminating app due to uncaught exception 'RLMException', reason: 'Invalid value 'min' to initialize object of type 'AgeRangeObject': missing key 'min'' 

Я смотрел на StackOverflow:

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

большое спасибо! :) Теперь я просвещен;) Я думаю, что документация Царства не совсем понятна в этом случае. – PiotrCh