2013-05-20 2 views
0

Ответ:Как получить значение JSON?

{ 
     "AT": null, 
     "EMs": [ 
      { 
       "EC": null, 
       "LM": null, 
       "SCs": 0, 
       "SM": "Username or Password is invalid." 
      } 
     ], 
     "OS": 1, 
     "PWD": "3456", 
     "UId": 399, 
     "UN": "bb", 
     "COM": "Apple", 
     "DId": 0, 
     "DN": "iPhone", 
     "DOS": "iOS", 
     "EA": "[email protected]", 
     "FN": "bb", 
     "IsCon": true, 
     "IsSuc": false, 
     "SD": "bb", 
     "SLT": "XU0QpDVC", 
     "STs": 0, 
     "UQId": "1d3346c", 
     "US": 2, 
     "Ver": "6.0" 
    } 

Здесь я хочу, чтобы принести значение тега SM, как «Имя пользователя или пароль неверен.»

Я попробовал этот код

NSError *error; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

NSString *SMString = [json objectForKey:@"SM"]; 
NSString *OSString = [json objectForKey:@"OS"]; 
NSString *DIdString = [json objectForKey:@"DId"]; 
NSString *UIdString = [json objectForKey:@"UId"]; 
+0

Его код в телефонной книге.? –

+0

Каков ответ для json (NSDictionary)? –

+0

Пожалуйста, подробно изложите свой вопрос после этого, мы сможем вам помочь – iEinstein

ответ

2

Я бы ожидать, чтобы это работало:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData 
                options:kNilOptions 
                 error:&error]; 
NSArray *EMsArray = [json objectForKey:@"EMs"]; 
NSAssert([EMsArray count] > 0, @"Expected at least one element in EMs array"); 
NSString *SMString = [[EMsArray objectAtIndex:0] objectForKey:@"SM"]; 
0

попробовать, как это,

NSArray *EMsArray = [json objectForKey:@"EMs"]; 
    if([EMsArray count]>0) 
     NSString *SMString = [[EMsArray objectAtIndex:0] objectForKey:@"SM"]; 
1

Данные вы заинтересованы в том, в массив внутри словаря, поэтому вам нужно сделать что-то вроде:

NSArray *EMsArray = [json objectForKey:@"EMs"]; 

for (NSDictionary *EMsDictionary in EMsArray) { 
    NSString *SMString = [EMsArray objectForKey:@"SM"]; 

    // do something with SMString 
} 
0

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

NSError *error; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

NSArray *EMs = [json objectForKey:@"EMs"]; 
NSDictionary *dict = [EMS objectAtIndex:0]; 
NSString *str = [dict objectForKey:@"SM"]; 

NSLog(@"%@",str); 
0

Попробуйте этот код:

NSArray *EMsArray = [json objectForKey:@"EMs"]; 

for (int i=0;i<[EMsArray count];i++) { 

NSDictionary *dicObj = [EMsArray objectAtIndex:i] 
NSString *str = [dicObj objectForKey:@"SM"]; 

NSLog(@"JSON value is:%@",str); 

} 

Надеется, что это помогает!

0

Как я могу видеть в вашем json, что он содержит массив с тегом «EMs».

Итак, сначала вам нужно извлечь массив из json и вам нужно извлечь словарь в inde 0 этого массива. Тогда вы можете просто использовать

objectForkey 

свойство NSDictionary и получать сообщения, которое вы хотите.

SBJSON *json = [SBJSON new]; 

NSError *error = [[NSError alloc] init]; 

NSString *jsonString = [json objectWithString:"your json string" error:&error]; 

NSArray *array = [[NSArray alloc]initWithArray:[jsonString valueForKeyPath:@"EMs"]]; 

if([array count]>0) 
{ 
    NSDictionary *_dic = [array objectAtIndex:0]; 
    NSLog(@"%@",[_dic objectForKey:@"SM"]); 
} 

см https://github.com/fbsamples/ios-friend-smash/tree/master/friendsmash_complete/friendSmasher/Classes для библиотеки JSon

0

Наиболее простое и элегантное решение заключается в использовании Ключевого пути, как это:

NSString *SMString = [json valueForKeyPath:@"EMs.SM"]; 

См пример код:

NSString *SMString = [dict valueForKeyPath:@"EMs.SM"]; 
NSLog(@"Value of key EMs -> SM: %@", SMString); 

, который выводит:

Value of key EMs -> SM: (
    "Username or Password is invalid." 
) 
0

следующий код может помочь вам

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

NSMutableArray *EmsArray=[json objectForKey:@"EMs"]; 
NSMutableDictionary *dataDic=[EMsArray objectAtIndex:0]; 
NSString *smString=[dataDic objectForKey:@"SM"]; 

Я полагаю, что в массиве ответа каждый раз, когда вы получаете только один объект.