iOS,JSON-RPC和NSJSONSerialization:处理空值

djs*_*ner 2 null cocoa-touch json-rpc ios nsjsonserialization

我正在使用JSON-RPC在iOS应用程序和服务器之间进行通信.服务器的某些返回值是可选的.

考虑到我正在使用的技术组合,最好是返回这些空值,如{"telephone":null},还是完全省略响应中的"telephone"元素?

对我要问的问题的进一步解释:

它看起来不像JSON-RPC规范与方法结果有很大关系(如果我错了请纠正我)并且显然不发送负载null元素会提高性能并减少带宽.我最感兴趣的是iOS NSJSONSerialization视角下的最佳方法.是否更容易/更好地检查NSDictionary中是否存在密钥或现有密钥是否具有空值?

Dav*_*d H 11

我正在使用一种完全不同的技术,有点不正统,因为我的代码处理大量数据集,我真的很讨厌必须在每个值上对NSNull进行测试.我做的是子类NSNull,所以在处理数据时,我可以测试它的数值是0,如果它的字符串长度是0,等等.

@implementation NSNull (JSON)

- (NSUInteger)length { return 0; }

- (NSInteger)integerValue { return 0; };

- (CGFloat)floatValue { return 0; };

- (NSString *)description { return @"0(null)"; } // so I know it was NSNull in log messages

- (NSArray *)componentsSeparatedByString:(NSString *)separator { return @[]; }

- (id)objectForKey:(id)key { return nil; }

- (BOOL)boolValue { return NO; }

@end
Run Code Online (Sandbox Code Playgroud)

编辑:我在电子商务运输应用程序中使用了完全相同的代码.几十个不同的API返回了数以千计的对象 - 不得不查看每个项目以查看它是否[NSNull null]会成为一场噩梦.我试着写一个例程来修饰结果,它会递归地查看字典和数组并重建对象,但它太复杂了.

无论如何,我从来没有遇到过这个解决方案的问题.显然是YMMV.