嘿,我正在编写一个iphone应用程序以将谷歌搜索结果添加到我的应用程序中,我已经使用JSON类来获得结果...当我在JSON Parser中解析它并将其存储在NSDictionary中时我得到了3把钥匙:
重要的一个是第一个具有搜索结果的responseData ...
问题是(我认为)在responseData中的另一个键是“results”,其中包含url和其他东西,这是我的应用程序最重要的部分...如何访问这个并将其放入NSDictionary .....
这是请求:
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton
为了明确说明,请考虑将该请求放入浏览器中,当您获得结果时,将其复制并放入左侧的此网站,以查看密钥和其他内容:
http://json.parser.online.fr/
日Thnx
答案 0 :(得分:4)
您可以使用JSON parser - SB Json将json字符串转换为ObjectiveC对象。请注意,ObjectiveC中有许多JSON解析器,但我选择了SB Json,因为它易于使用。但根据一些基准测试,JSONKit比SBJson更快。
一旦你有了你的json字符串就像这样 -
#import "JSON.h"
// Create SBJSON object to parse JSON
SBJSON *parser = [[SBJSON alloc] init];
// parse the JSON string into an object - assuming json_string is a NSString of JSON data
NSDictionary *object = [parser objectWithString:json_string error:nil];
NSLog(@"JSON data: %@", object);
如果您需要将公共时间轴从Twitter解析为JSON,您将采取以下措施。同样的逻辑可以应用于您的Google搜索结果。你需要仔细检查你所有的json结构......
// Create new SBJSON parser object
SBJSON *parser = [[SBJSON alloc] init];
// Prepare URL request to download statuses from Twitter
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://twitter.com/statuses/public_timeline.json"]];
// Perform request and get JSON back as a NSData object
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// Get JSON as a NSString from NSData response
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
// parse the JSON response into an object
// Here we're using NSArray since we're parsing an array of JSON status objects
NSArray *statuses = [parser objectWithString:json_string error:nil];
// Each element in statuses is a single status
// represented as a NSDictionary
for (NSDictionary *status in statuses)
{
// You can retrieve individual values using objectForKey on the status NSDictionary
// This will print the tweet and username to the console
NSLog(@"%@ - %@", [status objectForKey:@"text"], [[status objectForKey:@"user"] objectForKey:@"screen_name"]);
}
答案 1 :(得分:1)
Il me semble que voussavezdéjàcommentanalyzer JSON en forme NSDictionary,alors voici quelques suggestions surlafaçondede forer vers bas pourvosrésultatsdétaillésencascade。 En anglais pour tout le monde。
responseData本身是一个NSDictionary,结果是其中的一个对象。结果恰好是您提供的案例的数组。
将JSON转换为NSDictionary表单后,您将以递归方式转换内部的所有对象。
你可以尝试这样的东西来获得你想要的东西:
让我们假设完全转换的JSON位于NSDictionary中,名为响应
NSDictionary *responseDate = [response objectForKey:@"responseData"];
NSArray *resultsArray = [responseData objectForKey:@"results"];
现在您可以使用迭代器或for循环来遍历每个结果。
需要注意的一点是,如果只有一个结果,则应首先测试该对象的类是否为NSArray。此外,如果没有结果,您也应该对此进行测试。
所以你可能想用这种方式编码来处理这些情况:
NSDictionary *responseDate = [response objectForKey:@"responseData"];
If ([[responseData objectForKey:@"results"] isKindOfClass [NSArray class]]) {
NSArray *resultsArray = [responseData objectForKey:@"results"];
... do other things to get to each result in the array ...
}
else if ([[responseData objectForKey:@"results"] isKindOfClass [NSDictionary class]]) {
// it looks like each individual result in returned in a NSDictionary in your example
... do the things to handle the single result ...
}
else {
// handle no results returned
}
答案 2 :(得分:0)
如果您不确切知道发生了什么,那么您应该做的第一件事就是NSLog JSON解析器输出的description
。这将是NSDictionary和NSArray的“嵌套”,当您看到description
输出时,您将理解JSON“对象”与NSDictionary和JSON“数组”的一对一映射到NSArray 。因此,您“理解”解析器输出的方式与“理解”JSON源的方式相同。
在你的情况下,你可能会提取“responseData”对象,将其转换为NSDictionary,从中提取“结果”,将其(在此猜测)转换为NSArray,然后遍历该数组以提取单个结果