Bot*_*Bot 4 json objective-c ios ios5 nsjsonserialization
有没有办法NSJSONSerialization检查是否NSData是有效的JSON?如果API由于某种原因返回无效的JSON,我不希望应用程序出错.
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
Run Code Online (Sandbox Code Playgroud)
hyp*_*ypt 28
这不会"出错",如果JSON无效,它将返回nil.因此,测试它是否是有效的JSON将是:
NSError *error;
if ([NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error] == nil)
{
// Handle error
}
Run Code Online (Sandbox Code Playgroud)
如果它确实返回,nil那么你可以检查error出错了.
NSJSONSerialization类有一种方法可以做到这一点...(编辑:不,它没有...)
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
id jsonObj = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
BOOL isValid = [NSJSONSerialization isValidJSONObject:jsonObj];
Run Code Online (Sandbox Code Playgroud)
编辑:(在hypercrypts'评论后)
Hypercrypt是对的(我真的无法理解我是如何错过的)......即使我的回答似乎有效,但这是错误的.什么isValidJSONObject:方法可以检查对象是否可以序列化为JSON而不是反过来.所以他的回答是你正在寻找的.你可以使用这种方法,如果你从json有效载荷中获取一个可变副本,改变它,然后想要检查是否可以安全地尝试将其重新序列化为JSON字符串.但最重要的是,hypercrypt的答案是正确的,我认为将他的答案标记为正确而不是我的答案是公平的.无论如何,抱歉任何混乱和@hypercrypt感谢指出:)