iOS JSON 序列化空数组序列化为 nil 而不是 [ ]
Posted
技术标签:
【中文标题】iOS JSON 序列化空数组序列化为 nil 而不是 [ ]【英文标题】:iOS JSON serialization empty array serialized as nil instead of [ ] 【发布时间】:2013-08-09 20:51:15 【问题描述】:我正在尝试将一些 JSON 发送到 Rails 后端。序列化有效负载(NSDictionary)时,空数组编码为 nil 而不是 [ ](空数组)。
ios 不支持 JSON 将空 NSArray 编码为 [] 吗?
我尝试更改 dataWithJSONObject: 中的“选项”,但没有成功。 将 @"[]" 作为常规 ol' NSString 发送也不起作用。
代码如下:
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:payload options:NSJSONReadingMutableLeaves error:&error];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
AFJSONRequestOperation *authRequest = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:successBlock failure:failBlock];
[authRequest start];
感谢您的帮助!
【问题讨论】:
我在其他语言中看到了相反的情况,因为该语言没有 NSNull 等效项,所以使用了空数组。猜猜我从来没有打电话在 iOS 上发送一个空数组。 我建议您将NSError *
对象的地址传递给error:
参数,然后在返回时检查它。
顺便说一句,NSJSONReadingMutableLeaves
是 read JSON 的选项,而不是 write JSON。
也许你应该显示你的实际payload
,以及[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]
的输出。
你提到payload
是NSDictionary
,那么为什么你有一个空数组[]
作为顶层对象呢?另外,发送包含@"[]"
的NSString
……在哪里?进入JSON序列化方式?
【参考方案1】:
我怀疑问题出在 Rails 而不是 iOS,自 3.2.11 以来存在与 Rails 中的安全漏洞相关的问题
https://github.com/rails/rails/issues/8832
https://github.com/rails/strong_parameters/issues/82
例如:
在你的正文中发送一个空数组"bookmarks":[]
在 Rails 中序列化为:"bookmarks"=>nil
要确定问题出在哪里,您应该使用像 Charles 这样的代理检查请求。
【讨论】:
以上是关于iOS JSON 序列化空数组序列化为 nil 而不是 [ ]的主要内容,如果未能解决你的问题,请参考以下文章