如何检查JSON对象是不是空的?

时间:2015-06-17 23:33:54

标签: ios xcode swift

我正在制作一个小应用,允许用户在openlibrary.org上查阅图书。

该应用程序仍然非常基本,但可以查找和解析json数据。我遇到的问题是创建一个检查以确保首先存在一些数据。

在openlibrary上,如果您搜索的ISBN号存在,则会获得json数据:https://openlibrary.org/api/books?bibkeys=0586057242&f&jscmd=data&format=json

如果您查找不存在的ISBN,您只需返回一个空对象,如下所示:https://openlibrary.org/api/books?bibkeys=123&f&jscmd=data&format=json

如何实施检查以查看是否存在要解析的实际数据?目前我的应用程序没有崩溃,如果没有任何东西,它只是没有做任何事情。我想在没有找到数据的情况下为用户设置错误弹出窗口,但无法弄清楚如何进行初始检查。

4 个答案:

答案 0 :(得分:1)

您只需要检查JSON解析的结果是否为nil,在这种情况下,数据的格式不正确。

 NSError *error;
    if ([NSJSONSerialization JSONObjectWithData:JSONdata options:kNilOptionserror:nil] == nil)
    {
        // Handle error
    }

(SWIFT):

import Foundation

if NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary == nil{

}

或者你可以得到一个BOOL告诉你数据是否正确。

[NSJSONSerialization isValidJSONObject:jsonObj];
//THis actually returns a BOOL

(SWIFT):

NSJSONSerialization.isValidJSONObject(jsonObj)

希望它有所帮助。

答案 1 :(得分:1)

你在期待什么?一本字典?如果是这样,你很幸运。我相信当查询结果为空时,您获得的空括号表示空字典。因此,只需使用JSONObjectWithData将响应转换为数据对象,然后检查结果的count。如果计数为零,则结果集为空。

答案 2 :(得分:0)

通常,您将该响应转换为数组。该数组可以包含字典数组,也可以是字典数组。我就是这样处理的。

NSError *error;
NSData *URLData = [NSData dataWithContentsOfURL:<yourURL>];
NSArray *array = [NSJSONSerialization JSONObjectWithData:URLData options:NSJSONReadingMutableContainers error:&error];
if (error) {
    NSLog(@"THERE WAS AN ERROR IMPORTING JSON");
}
if ([array count] > 0)
{
    //Something here
} else {
    //NO Data
}

答案 3 :(得分:0)

检查NSData是否等于NSString“{}”

If let (yourNSDataFromURL as? NSString) == "{}" {/*do what ever you want to**/}

您还可以检查某个键的键是否为零