2013-07-22 5 views
3

У меня есть проблема с отображением JSON в объект фундаментного ...Json разбор ноль поля в Objective-C

Есть ли способ поставить «ноль» значение переменного-член класса, когда строку JSON не содержит этого ключа?

Ex, вот мой DataModel класс:

@interface DataModel : JSONModel 

@property (strong, nonatomic) NSString* Status; 
@property (strong, nonatomic) NSString* ErrorCode; 

@property (strong, nonatomic) ClientModel* Client; 

@end 

Этот класс используется для анализа информации о клиенте в объекте ClientModel и имеет поле Status ErrorCode &.

Поле состояния может содержать «ОК» или «Ошибка». Здесь нет проблем. следующее поле - ErrorCode, если в json содержится «Ошибка» в качестве статуса.

Проблема заключается в том, что сервер не всегда отправляет мне значение ключа для ErrorCode (когда состояние «ОК», API-интерфейс сервера не отправляет значение ключа ErrorCode).

Учитывая тот факт, что я не могу изменить JSON, отправленный сервером, как можно проанализировать строку JSON, полученную в моем модальном объекте, и поместить значение «nil» в значение ErrorCode, когда строка JSON не содержит его?

Есть ли библиотека, которая позволяет нам это делать? В настоящее время я использую JSONModel, но это дает мне ошибку «Входящие данные были недопустимы», когда отсутствуют ключи. Я знаю, что API Jackson для java обрабатывает такую ​​ситуацию, но я не знаю, есть ли что-то подобное в Objective-C. Если я смогу сделать обходной путь с помощью NSJSONSerialization, я был бы рад услышать его.

Спасибо!

+0

Как вы заселяете модель? Вы вытаскиваете ценности из «NSDictionary»? –

ответ

7

Похоже, что JSONModel объявляет a protocol called "Optional", предназначенный именно для этого использования. Объявите свойство, которое может отсутствовать в JSON в соответствии с этим протоколом, чтобы сделать инициализатор ошибкой:

@property (strong, nonatomic) NSString<Optional> * ErrorCode; 
+0

Спасибо, Джош! Не могло быть проще. Другой вопрос, как применить этот протокол для NSArray? Xcode смешивает его как имя класса, так как он имеет одинаковые символы «<' '>»! – Shinnyx

+0

Я не уверен, что вы имеете в виду. Объявление свойства должно выглядеть одинаково независимо от того, что класс: '@property (сильный, неатомный) NSArray * baubles;' –

+0

О, я думаю, что я не объявил свой NSArray правильным способом. Исходя из фона Java, мы должен был указать тип объекта, который будет содержаться в массиве! Еще раз спасибо за ваше время Джош. – Shinnyx