如何处理JSON异常目标C

SteBra

在创建用于获取json的url之前,用户必须先输入一些数据。如果输入数据错误,则将无法正确获取JSON。

但是我不知道如何处理使用错误的url调用JSON的异常。

这是我的代码:

NSError *error;
NSMutableDictionary* json = [NSJSONSerialization
                             JSONObjectWithData:url
                             options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves
                             error:&error];
if (error){
    NSLog(@"%@",[error localizedDescription]);
}

else{

    @try {
        if (json){
            [Constants shared].salt = json[@"salt"];

代码的最后一行是发生异常的地方,因为用户输入了错误的输入。所以很明显,不会有一个正确的json响应fetchet,也就不会有“盐”对象。我得到的错误是:

-[__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance 0x146aa310

我尝试将json提取放入@try @catch中,但没有成功。

有什么建议 ?

编辑:

当用户键入正确的代码时,这是我得到的json响应:

{
user_id: "22066",
salt: "ce8c0f9e3e1add06bebc1acded7b692b68efddb87bfdc5bb1fb516f6a3e24425"
}

这是我得到的,当代码无效时:

[ ] (empty array)
卡列布

问题不在于字典没有键的对象@"salt",而是json首先不是字典。仔细查看错误消息,您将看到它是一个数组。问题不是关键,而是数组不响应的事实-objectForKeyedSubscript:

因此,当您从取回对象时-JSONObjectWithData:...,请nil在尝试访问其内容之前,先检查它是否不是字典,实际上是否是字典。您可以像这样检查它:

if ([json isKindOfClass:[NSDictionary class]]) {
    // put the code that accesses `json` here
}

这条件将是false,如果jsonnil或不是字典以外的东西。else如果您依赖获取数据,则可以添加一个子句以采取任何必要的步骤进行恢复。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章