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

Я думаю, что понял, как использовать NSJSONSerialization во всем. Звонок, который я делаю, это:

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

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

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

Сервер настроен так, что он ожидает либо ошибку в виде строки, либо null, если ошибки нет.

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

Спасибо!


person ymotov    schedule 17.12.2012    source источник


Ответы (4)


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

Свифт

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

Цель-C

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

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

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

person Gabriele Petronella    schedule 17.12.2012

Я пытался сделать это и работал на меня.

var param: [String:Any] = [:]

param["firstName"] = "somename"

param["middleName"] = NSNull()

param["lastName"] = "somename"

print(param)

Результат:

["firstName":"somename","middleName":null,"lastName":"somename"]
person Ashish Gupta    schedule 15.11.2019

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

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

person Guig    schedule 31.08.2016

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

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

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

person Ricardo Falasca    schedule 17.12.2012
comment
[NSNull null], а не NULL. - person gnasher729; 19.01.2015
comment
вы не можете вставлять нулевые значения в NSDictionary - person Climbatize; 29.01.2015