NSJSONSerialization返回“<null>”字符串</null>

时间:2014-06-25 05:25:53

标签: ios json nsdictionary nsjsonserialization

我尝试将NSDictionary设置为从服务器检索到的JSON对象,我在此行中执行此操作:

_peopleArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

它工作正常并正确创建字典。但是,我遇到了一个问题,JSON对象中null的值在字典中存储为"<null>"字符串值。有没有办法解决这个问题或解决它?我想避免遍历整个事物并将它们设置为@""

感谢您的帮助!

〜Carpetfizz

2 个答案:

答案 0 :(得分:7)

你错了。 JSON中的空值存储为&lt; null&gt;字符串值。它们存储为NSNull对象,NSLog将其记录为&lt; null&gt;。

您永远不会相信您提供的数据。如果您假设您有一个NSString并且服务器向您发送了一个号码,那么您的代码可能会崩溃。

NSString* myJSONString = ...;
if ([myJSONString isKindOfClass:[NSString class]]) {
    it is a string
} else {
    it is not a string
}

答案 1 :(得分:1)

我猜没有什么,虽然它可以很容易地从api制造商纠正,如果不可能,你可以随时放一个简单的宏,我用来避免这样的事情,按照下面的宏

#define Is_Empty(value) (value == (id)[NSNull null] || value == nil || ([value isKindOfClass:[NSString class]] && ([value isEqualToString:@""] ||  [value isEqualToString:@"<null>"]))) ? YES : NO

#define IfNULL(original, replacement) IsNULL(original) ? replacement : original

#define IsNULL(original) original == (id)[NSNull null]

#define SafeString(value) IfNULL(value, @"")

用法

self.label.text=SafeString([dic objectForKey:@"name"]);
相关问题