NSJSONSerialization返回"<null>"字符串

Car*_*izz 5 json nsdictionary ios nsjsonserialization

我试图将NSDictionary设置为从服务器检索的JSON对象,我在这行中做到了:

_peopleArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助!

〜Carpetfizz

gna*_*729 8

你错了.JSON中的空值不会存储为<null>字符串值.它们存储为NSNull对象,NSLog记录为<null>.

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

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


iph*_*nic 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, @"")
Run Code Online (Sandbox Code Playgroud)

用法

self.label.text=SafeString([dic objectForKey:@"name"]);
Run Code Online (Sandbox Code Playgroud)