2013-11-17 3 views
0

Я не могу найти полезный пример прямо сейчас. У меня есть php-скрипт на моем сервере, который возвращает все данные из выбранных таблиц базы данных. Я пытаюсь получить это с моего устройства ios на стороне клиента и проанализировать этот json, чтобы я мог посмотреть, что там есть, и добавить некоторые из этих данных в мою базу данных sqlite. Я использую fmdb как обертку прямо сейчас. Вот код, у меня есть для подключения к серверу и я не уверен, куда идти оттудаКак получить данные JSON из веб-службы? iOS Objective-c

NSURL *url = [NSURL URLWithString:@"http://index.php"]; 

NSString * post =[NSString stringWithFormat:@"lang=%@",@"English"]; 

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setTimeoutInterval:60]; 

[request setURL:url]; 
[request setHTTPMethod:@"POST"]; 

[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
[connection start]; 

Мои данные JSON выглядит так

{"login":[{"userid":"1","password":"test","aclevel":"1"}],"answers":[{"aid":"1","qid":"1","sid":"1","freetext":null,"a":null,"b":null,"c":null,"d":null,"e":null,"f":null,"g":null,"h":null,"i":null,"j":null,"synch":null,"type":null},{"aid":"5","qid":"5","sid":"5","freetext":null,"a":null,"b":null,"c":null,"d":null,"e":null,"f":null,"g":null,"h":null,"i":null,"j":null,"synch":null,"type":null}],"projects":{"pid":"3","name":"apmatt","descr":"tapest","creator":"macurlatt","datetime":null,"synch":null},"questions":[{"qid":"1","pid":"1","sid":"1","question":null,"a":null,"b":null,"c":null,"d":null,"e":null,"f":null,"g":null,"h":null,"i":null,"j":null,"synch":null,"type":null}],"surveys":[{"sid":"2","pid":"2","name":"matt","descr":"test","creator":"matt","datetime":null,"synch":null},{"sid":"3","pid":"3","name":"amatt","descr":"taest","creator":"maatt","datetime":null,"synch":null}]} 

ответ

0

Это довольно просто, если вы уверены, что сервер возвращая такой действительный JSON. iOS предоставляет класс NSJSONSerialization, позволяющий вам достичь этого. Следующие строки кода дают вам прогноз на процесс:

__block id data = nil; 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] 
         completionHandler:^(NSURLResponse*  response, NSData* responseData, NSError* err) { 
    data = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil]; 
}]; 

Если ответ правильный формат JSON вы бы получить ваши данные обратно в «data» переменную, которая будет либо NSArray или NSDictionary, основанный на формат данных, он разобрался.

+0

Я получаю переменную, которая не может быть назначена в приведенном выше коде в строке данных. любые предложения –

+0

@WilliamBrasky Не достал тебя. Что вы имели в виду под переменной? Вы можете получить что-либо в 'responseData', и код должен работать до тех пор, пока вы не получите какой-то действительный JSON. –

+1

Это потому, что вы присваиваете значение переменной, которая была определена вне блока. Измените первую строку на __block id data = nil; – Guferos

Смежные вопросы