我正在制作一个小应用,允许用户在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
如何实施检查以查看是否存在要解析的实际数据?目前我的应用程序没有崩溃,如果没有任何东西,它只是没有做任何事情。我想在没有找到数据的情况下为用户设置错误弹出窗口,但无法弄清楚如何进行初始检查。
答案 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**/}
您还可以检查某个键的键是否为零