将NSString转换为NSData以在XCODE中使用

时间:2014-05-12 21:05:40

标签: json xcode string nsdata

我从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];

在最后四行的某处,它没有按预期执行,数据对象中没有数据。任何建议或正确方向的快速提示都非常感谢!谢谢你

2 个答案:

答案 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]