2013-11-08 3 views
0

Я очень новой для разработки приложений IOS и я получаю ниже ответ от сервера:Как синтаксический анализ получил ответ

"[{\"EmployeeID\":\"000001\",\"EmplyeeName\":\"ABCD EFGHI\"}, 
{\"EmployeeID\":\"000002\",\"EmplyeeName\":\"ADGHT ASASASAS\"}]" 

Пожалуйста, кто-нибудь помочь мне о том, как использовать идентификатор служащего и имя сотрудника в моем заявление.

+0

пожалуйста, напишите свой адрес ... – Jitendra

+0

Что вы пробовали? Вы делали * какие-либо исследования перед публикацией вопроса? –

+0

@Martin R: Я сделал слишком много исследований, и я не получаю надлежащего решения, поэтому я разместил этот вопрос. –

ответ

2

Ваши данные в формате JSON выглядит как «вложенной JSON», что означает, что вы должны десериализации дважды.

Первая десериализация извлекает строку из ваших данных JSON:

NSData *response = ...; // your data 
NSError *error; 
NSString *innerJson = [NSJSONSerialization JSONObjectWithData:response 
           options:NSJSONReadingAllowFragments error:&error]; 

Теперь innerJson это строка

[{"EmployeeID":"000001","EmplyeeName":"ABCD EFGHI"},{"EmployeeID":"000002","EmplyeeName":"ADGHT ASASASAS"}] 

который снова данные в формате JSON. Вторая десериализация извлекает массив:

NSArray *entries = [NSJSONSerialization JSONObjectWithData:[innerJson dataUsingEncoding:NSUTF8StringEncoding] 
           options:0 error:&error]; 

И теперь вы можете получить доступ к нему, как

for (NSDictionary *entry in entries) { 
    NSString* employeeID = [entry objectForKey:@"EmployeeID"]; 
    NSLog(@"%@", employeeID); 
} 
+0

Большое спасибо Martin R и Alex, он работает без проблем. –

+0

Технически это только «сбежавший», а не «вложенный». Но вышеупомянутое использование NSJSONSerialization - это один из способов (из нескольких) «unescape». –

+0

@HotLicks: Если '[{" foo ":" bar "}]' отправляется с сервера как '" [{\ "foo \": \ "bar \"}] ", а затем 1) все кавычки escaped * и * 2) результат завернут в кавычки.Вот почему я думал об этом как о строковом объекте JSON, значение которого (в данном случае) является объектом массива JSON, и выбрал термин «вложенный JSON». - Конечно, есть и другие способы, но NSJSONSerialization казалась самой легкой и наименее подверженной ошибкам, например, если '[" foo \ "bar"] 'отправляется с сервера как' "[\" foo \\\ "bar \ "]" '. –

2
NSData *response = ...; 
NSArray *entries = [NSJSONSerialization JSONObjectWithData:response 
                options:0 
                error:nil]; 

for(NSDictionary* entry in entries) { 
    NSString* employeeID = [entry objectForKey:@"EmployeeID"]; 
} 
+0

Спасибо ALex, не повезло с вышеуказанным кодом, можете ли вы сообщить мне, где я ошибаюсь в приведенном ниже коде? - (void) connectionDidFinishLoading: (NSURLConnection *) connection {NSString * s = [[NSString alloc] initWithData: кодировка webData: NSASCIIStringEncoding]; NSLog (@ "response% @", s); NSData * response = [s dataUsingEncoding: NSUTF8StringEncoding]; NSArray * entries = [NSJSONSerialization JSONObjectWithData: параметры ответа: 0 error: nil]; для (NSDictionary * запись в записи) { NSString * employeeID = [объект entryForKey: @ "EmployeeID"]; NSLog (@ "print% @", employeeID); }} –

+0

Почему вы не использовали «NSData * response = webData;»? – Alex

+0

Используется гайка без удачи, не показывающая результата –

0

Используйте это:

NSData* yourData = [[NSData alloc] initWithContentsOfURL: yourURL]; 
NSarray* yourJSON = [NSJSONSerialization JSONObjectWithData:yourData options:kNilOptions error:nil]; 

Надеется, что это поможет вам :)

1

Look JSON Parser вашего ответ JSON, чтобы вы нужно получить эти данные от json.

NSURL * url=[NSURL URLWithString:@"<YourURL>"]; 

NSData * data=[NSData dataWithContentsOfURL:url]; 

NSError * error; 

NSMutableDictionary * json = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error: &error]; 

NSLog(@"%@",json); 


NSMutableArray * EmployeeID=[[NSMutableArray alloc]init]; 

NSMutableArray * EmployeeName=[[NSMutableArray alloc]init]; 

NSArray * responseArr = json[@"geonames"]; 

for(NSDictionary * dict in responseArr) 
{ 

[EmployeeID addObject:[dict valueForKey:@"EmployeeID"]]; 
[EmployeeName addObject:[dict valueForKey:@"EmplyeeName"]]; 

} 

Теперь вы получаете массив EmployeeID, EmployeeName, теперь вы можете использовать где угодно, где хотите.

0

Попробуйте использовать это:

NSDictionary *myJSON = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:nil]; 
Смежные вопросы