如何通过NSJSONSerialization在JSON中包含空值?

我想我知道如何使用NSJSONSerialization。 我打的电话是:

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

其中参数是一个NSDictionary,其中包含在JSON请求中使用的键和值。 一切都很好,所有,直到我必须使用null作为一个值,而不是一个空string。 我找不到一种方法来将该值设置为null 。 我需要创build的json的例子是:

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

服务器设置的方式是,如果没有错误,那么它要么将错误当作string,要么将为空

有任何想法吗? 我是否错过了一个API调用或类似的东西?

谢谢!

你必须使用NSNull 。 例如

迅速

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

Objective-C的

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

从NSDictionary的官方文档:

关键和价值都不是零; 如果您需要在字典中表示空值,则应该使用NSNull。

如果您使用的是Swifty JSON,我刚刚创build了一个应该处理nil 的PR 。 它尚未合并,可能需要一些改进。 描述如何做这件事的部分应该是一个很好的开始,如果你需要写你自己的实现。 逻辑不是那么复杂,但可能会有棘手的边缘案例/性能事情要考虑。

我知道这不是对这个问题的直接回应,因为它取代了NSJSONSerialization ,但我希望它可以帮助一些人由于Swift处理nil / json而感到沮丧!

只要尝试这样的事情:

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

并使用这个对象作为你想要的参数。