RestKit 从 JSON 响应返回空值作为“<null>”
Posted
技术标签:
【中文标题】RestKit 从 JSON 响应返回空值作为“<null>”【英文标题】:RestKit returns null value as "<null>" from JSON response 【发布时间】:2013-01-04 02:32:38 【问题描述】:我从 restkit 获得的 JSON 响应中有一个奇怪的错误。
我向服务器发出一个 post 请求,它以 "someVal" = "<null>"
而不是 "someVal" = null
响应。这导致 xcode 以一种非常奇怪的方式处理它,因此我似乎无法将其保存到 NSUserDefaults ......而且我不能像正常的空值一样删除它......它会被检测为什么?我想也许是一个字符串?但是不……由于某种原因,它不能将其保存为字符串。
【问题讨论】:
您确定该值存储为字符串"<null>"
?因为打印带有[NSNull null]
值的字典的描述也会产生输出key = "<null>"
。
【参考方案1】:
我不认为这个问题仅限于 RestKit。更多来自为您提供 JSON 的服务器。我在使用 AFNetworking 时遇到了同样的问题。
我找到了这个字典类别,您可以使用它来删除空值并替换为空字符串。您可以使用它,也可以直接删除逻辑来对您的空值进行排序。
@implementation NSDictionary (JRAdditions)
- (NSDictionary *) dictionaryByReplacingNullsWithStrings
NSMutableDictionary *replaced = [NSMutableDictionary dictionaryWithDictionary:self];
const id nul = [NSNull null];
const NSString *blank = @"";
for(NSString *key in self)
const id object = [self objectForKey:key];
if(object == nul)
//pointer comparison is way faster than -isKindOfClass:
//since [NSNull null] is a singleton, they'll all point to the same
//location in memory.
[replaced setObject:blank forKey:key];
return [NSDictionary dictionaryWithDictionary:replaced];
+ (NSDictionary *)dictionaryByReplacingNullsWithStrings:(NSDictionary *)dict
NSMutableDictionary *replaced = [NSMutableDictionary dictionaryWithDictionary:dict];
const id nul = [NSNull null];
const NSString *blank = @"";
for(NSString *key in dict)
const id object = [dict objectForKey:key];
if(object == nul)
//pointer comparison is way faster than -isKindOfClass:
//since [NSNull null] is a singleton, they'll all point to the same
//location in memory.
[replaced setObject:blank forKey:key];
return [NSDictionary dictionaryWithDictionary:replaced];
@end
// you can use this category on your dictionaries.
NSDictionary *jsonDict = JSON;
jsondict = [jsonDict dictionaryByReplacingNullsWithStrings];
【讨论】:
这不适用于显示为“以上是关于RestKit 从 JSON 响应返回空值作为“<null>”的主要内容,如果未能解决你的问题,请参考以下文章
Restkit 从 Foursquare API 返回 nil 响应