Xcode 8.1部署目标iOS 9.0
我正在获得一系列紧凑的场地对象,正如预期的Foursquare Venue Search端点......
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
当我使用...
检查数据对象时if ([NSJSONSerialization isValidJSONObject:data])
我得到了一个错误。
有人可以告诉我这里有什么问题吗?
编辑: 这是完整的if块(在if块中添加类型转换为数据之后)......
id foundationObject;
NSLog(@"data:- %@",data);
if ([NSJSONSerialization isValidJSONObject:(id)data])
{
foundationObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"venues foundation object:- %@",foundationObject);
}
之前的代码没有if块。只是...
id foundationObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
当我意识到(在上述语句之后使用断点) foundationObject 为零时,即使 data 不是
,也会进行更改。注意:这在我3月份发布iOS 9.x应用程序之前就运行良好。可以调用Venue Endpoint的版本有所作为吗?
答案 0 :(得分:3)
您在这里测试的是NSData。 isValidJSONObject
的输入为id
而不是NSData
+ (BOOL)isValidJSONObject:(id)obj;
如果obj可以转换为JSON数据(YES
),则返回NSData
,否则返回NO。
另外,根据文件,
可以转换为JSON的对象必须具有以下属性:
- 顶级对象是NSArray或NSDictionary。
- 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
- 所有字典键都是NSString的实例。
- 数字不是NaN或无穷大。
醇>调用isValidJSONObject:或尝试转换是判断给定对象是否可以转换为JSON数据的明确方法。
要将NSData
转换为JSONObject,您可以使用以下代码
NSError *error;
id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
if (!error) {
// successfully done.
}else {
NSLog(@"error: %@", error.localizedDescription)
}
请注意,要找出您从服务器接收的jsonData(NSData
)有什么问题,您必须将NSError
对象传递给方法,如上面的代码所示。如果将NSData
转换为jsonObject失败,您可以根据它找出原因。
有关在Objective-C中使用NSError
个对象的更多信息,请查看此link
答案 1 :(得分:3)
您在这里使用了错误的方法isValidJSONObject
将告诉您JSON对象(id)是否将转换为JSON数据。
根据doc
返回一个布尔值,指示给定对象是否可以 转换为JSON数据。 如果obj可以转换为JSON数据,则为YES,否则为NO。
如果您想查看数据,那么您应该使用JSONObjectWithData:options:error:
并检查它是否为零。
修改强>
您需要先将数据转换为NSDictionary
或NSArray
,如此
NSMutableDictionary * dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
然后检查dict
是否是一个有效的儿子,或者不是这样的
if([NSJSONSerialization isValidJSONObject:dict]){
NSLog(@"dict is a valid JSON");
}else{
NSLog(@"dict is not valid JSON");
}