Подтвердить что ты не робот

Как включить нулевое значение в JSON через NSJSONSerialization?

Мне кажется, я понимаю, как использовать NSJSONSerialization для всех. Вызов, который я делаю:

[NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error]

где параметры - это NSDictionary, который включает ключи и значения, используемые в запросе JSON. Все нормально и все, пока я не буду использовать null как значение вместо пустой строки. Я не могу найти способ установить значение как null вообще. Пример json, который мне нужно создать, это:

{"target"
  {"firstname":<firstname>,
   "lastname":<lastname>},
 "error":null
}

Способ установки сервера заключается в том, что он ожидает либо ошибки, либо строки, либо нет, если нет ошибки.

Любые идеи? Я пропустил вызов API или что-то в этом роде?

Спасибо!

4b9b3361

Ответ 1

Вы должны использовать NSNull. Например,

Swift

let dict = ["firstKeyHasValue": 2342, "secondKeyHasNoValue": NSNull()]

Objective-C

NSDictionary *dict = @{ @"error": [NSNull null] };

Из официальной документации NSDictionary:

Ни ключ, ни значение не могут быть равны нулю; если вам нужно представить нулевое значение в словаре, вы должны использовать NSNull.

Ответ 2

Если вы используете Swifty JSON, я только что создал PR, который должен обрабатывать нуль. Он еще не слился и может потребоваться некоторые улучшения. часть, которая описывает, как это сделать, должно быть хорошим началом для написания вашей собственной реализации, если вам нужно. Логика не так сложна, но может быть сложная проблема с краями/производительность, о которой нужно подумать.

Я знаю, что это не прямой ответ на вопрос, поскольку он заменяет NSJSONSerialization, но я надеюсь, что это может помочь некоторым людям разочароваться в том, как Swift обрабатывает nil/json!

Ответ 3

Просто попробуйте что-то вроде этого:

NSDictionary *jsonObj = [NSDictionary dictionaryWithObjectsAndKeys:@"My Name", @"name", @"Developer", @"occupation", NULL, @"My NULL field", nil];

и используйте этот объект в качестве параметра, где вы хотите.