我从Yummly API获取数据,我想使用它,好像它是序列化的JSON数据。但是,它目前是一个字符串,我无法弄清楚如何正确地将其转换为数据。代码如下:
NSString *searchParameters = @"basil"; //should be from text box
//NSError *error1 = nil;
NSString *searchURLName = [@"http://api.yummly.com/v1/api/recipes?_app_id=myAPIId&_app_key=myAPIkey&" stringByAppendingString:searchParameters];
NSURL *searchURL = [NSURL URLWithString:searchURLName];
NSString *searchResults = [NSString stringWithContentsOfURL:searchURL encoding:NSUTF8StringEncoding error:nil];
// Here, the search results are formatted just like a normal JSON file,
// For example:
/* [
"totalMatchCount":777306,
"facetCounts":{}
]
*/
// however it is a string, so I tried to convert it to data
NSData *URLData = [searchResults dataUsingEncoding:NSUTF8StringEncoding];
URLData = [URLData subdataWithRange:NSMakeRange(0, [URLData length] - 1)];
_searchArray = [NSJSONSerialization JSONObjectWithData:URLData options:NSJSONReadingMutableContainers error:nil];
在最后四行的某处,它没有按预期执行,数据对象中没有数据。任何建议或正确方向的快速提示都非常感谢!谢谢你
答案 0 :(得分:0)
查看从NSJSONSerialization
对象返回的错误,如
NSError *error;
_searchArray = [NSJSONSerialization JSONObjectWithData:URLData options:NSJSONReadingMutableContainers error:&error];
NSLog(@"%@", error);
这可能会给你一些错误的提示。这应该工作。
为什么你要做URLData = [URLData subdataWithRange:NSMakeRange(0, [URLData length] - 1)];
?您不需要复制数据,如果这就是您执行此操作的原因。
另外,您似乎想要将数组作为顶级对象(通过
判断)/* [
"totalMatchCount":777306,
"facetCounts":{}
]
*/
但这是一本字典。基本上你可能想要一本字典,而不是数组。这应该是
/* {
"totalMatchCount":777306,
"facetCounts":{}
}
*/
但是返回的错误会告诉你。
答案 1 :(得分:0)
看起来你有点过于复杂了。您根本不需要将此数据作为NSString
引入。相反,只需将其放入NSData
并将其交给解析器。
尝试:
NSString *searchParameters = @"basil"; //should be from text box
NSString *searchURLName = [@"http://api.yummly.com/v1/api/recipes?_app_id=myAPIId&_app_key=myAPIkey&" stringByAppendingString:searchParameters];
NSURL *searchURL = [NSURL URLWithString:searchURLName];
NSData *URLData = [NSData dataWithContentsOfURL:searchURL];
_searchArray = [NSJSONSerialization JSONObjectWithData:URLData options:NSJSONReadingMutableContainers error:nil];
请注意,您希望验证解析的JSON对象确实是一个预期的数组,而不是/不包含[NSNull null]
。