Разбор JSON из Google API на iPhone - PullRequest
0 голосов
/ 05 марта 2012

РЕДАКТИРОВАННЫЙ КОД

Я сделал так:

// Create new SBJSON parser object
    SBJsonParser *parser = [[SBJsonParser alloc] init];

    // Prepare URL request to download statuses from Twitter
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/maps?q=restaurant&sll=23.00,72.00&radius=2000&output=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:NSASCIIStringEncoding];
    [json_string stringByReplacingOccurrencesOfString:@"while(1);" withString:@""];

    NSDictionary *json_dict = [json_string JSONValue];
    NSLog(@"%@",json_dict);

Но тогда я также получаю null в json_dict

Я хочу проанализировать данные, которые я получаю от Google Webservice.

http://www.google.com/maps?q=restaurant&sll=23.00,72.00&radius=2000&output=json

Я использовал следующий код:

// Create new SBJSON parser object
SBJsonParser *parser = [[SBJsonParser alloc] init];

// Prepare URL request for Getting the Restaurent at particular coordinate.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/maps?q=restaurant&sll=23.00,72.00&radius=2000&output=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];

Но я не получаю ответ. Если я использую какой-то другой API, например: http://twitter.com/statuses/public_timeline.json,, он будет правильно анализироваться, но это не работает для API Google

Я проверил строку ответа в версии JSON. Ответ, который мы получаем, формирует правильное дерево. Это не показывает никакой ошибки, но массив в ответ, который я получаю, является нулем.

Ответы [ 6 ]

3 голосов
/ 05 марта 2012

РЕДАКТИРОВАТЬ :

Я искал и обнаружил, что это неправильный ответ, поскольку вы получаете файл с расширением JSON, а не ответ JSON, как в случае с TwitterAPI вы имеете в виду.Поэтому мой совет: google place api и найдите ответ JSON для списка ресторанов, а затем повторите попытку.

Для того, чтобы нажать там ключ api, вам нужно пройти аутентификацию с помощью своего собственного ключа api, которыйвы получаете this .

как только вы получите свой ключ API, вы можете нажать API, как это ..

https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AddYourOwnKeyHere

это взамендаст вам ответ JSON, который вы можете легко проанализировать (это возвращает словарь) и вуаля, что вы сделали (этот API ограничен только 100 попаданиями в день.) ... надеясь, что это поможет.

Так что вашкод будет выглядеть так и будет работать Я проверил его ...

/// Create new SBJSON parser object 
    SBJsonParser *parser = [[SBJsonParser alloc] init];

    // Prepare URL request to download statuses from Twitter
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=5000&types=food&sensor=false&key=yourOwnAPIKey"]];

    // 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];

    NSLog(@"statuses:%@", statuses);  
2 голосов
/ 05 марта 2012

используйте это

NSDictionary *json_dict = [responseString JSONValue];
NSLog(@"%@",json_dict);

, тогда вы можете получить любое значение, используя его ключ

1 голос
/ 05 марта 2012

вы можете использовать API Google Места, заменив URL на этот

https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=2000&types=restaurant&name=harbour&sensor=false&key=AddYourOwnKeyHere

Генерируйте свой ключ от Google "https://code.google.com/apis/console/?pli=1#project:305239127220"

1 голос
/ 05 марта 2012

Строка ответа от http://www.google.com/maps?q=restaurant&sll=23.00,72.00&radius=2000&output=json начинается с while(1);, это не допустимый JSON, удаление должно работать.

0 голосов
/ 05 марта 2012

Попробуйте это

Используйте SBJson Вместо jsonValue метода.

1) импортируйте "SBJSON.h" в .h ViewController.

NSString *jsonString;
//jsonString this is The Coming JSON Response.

SBJSON *parser = [[[SBJSON alloc] init] autorelease];
NSDictionary *jsonResponse = (NSDictionary*)[parser objectWithString:jsonString error:nil];
NSDictionary *responseData = [jsonResponse objectForKey:@"response"]; objectForKey:@"venues"] ;
//Further parsed the Data According to the Keys.
0 голосов
/ 05 марта 2012

Вместо создания URLRequest вы можете напрямую загрузить содержимое из URL в вашу jsonString следующим образом:

NSString * jsonString = [[NSString alloc] initWithContentsOfURL:@"http://www.google.com/maps?q=restaurant&sll=23.00,72.00&radius=2000&output=json" encoding:NSUTF8StringEncoding error:nil];

И преобразовать эту jsonString в NSDictionary с помощью JSONParser.

Надеюсь, это решит проблемуваша проблема .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...