2014-01-27 3 views
1

У меня есть набор словарей JSON, которые я обрабатываю. Моя проблема заключается в том, где я хочу отображать все записи, которые соответствуют моей требуемой паре ключ-значение (имя ключа) в массиве, я показываю только последний в своем представлении таблицы. Это почти 4 часа ночи, и я собираюсь по кругу с 10 вечера, поэтому любая помощь будет очень признательна, поскольку я что-то пропускаю. Благодаря!JSON Parse iOS Массив словарей, обработанных в массив, отображает только последний объект в tableview

NSArray *jsonDataArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; 
self.someArray = [[NSMutableArray alloc]init]; 

for (NSMutableDictionary *dictionary in jsonDataArray) 
{ 
    NSMutableArray* Response_array = [dictionary objectForKey:@"loans"]; 
    NSLog(@"Array: %@", Response_array); 

    NSDictionary *dict = [Response_array objectAtIndex:0]; 
    NSLog(@"dict is %@",dict); 

    self.someMutableArray = [dict objectForKey:@"name"]; 

    NSLog(@"what is name %@",self.someMutableArray); 
} 

и я попробовал:

NSArray *jsonDataArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; 

for (int i = 0 ; i < jsonDataArray.count ; i++) 
{ 
    self.someDictionary = [[jsonDataArray objectAtIndex:i] objectForKey:@"loans"]; 
    self.someMutableArray = [self.someDictionary valueForKey:@"name"]; 
    NSLog(@"MutableArray inside is %@", self.someMutableArray);  
} 

NSLog(@"MutableArray outside is %@",self.someMutableArray); 

На моей последней попытке я переместил расположение valueForKey: @ "имя":

NSArray *jsonDataArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; 
self.someMutableArray = [NSMutableArray array]; 


for (int i = 0 ; i < jsonDataArray.count ; i++) 
{ 
    self.someMutableArray = [[jsonDataArray objectAtIndex:i] objectForKey:@"loans"]; 
} 

NSLog(@"someMutableArray outside is %@",self.someMutableArray); 

Тогда в cellForRowAtIndexPath моего Tableview, у меня есть :

NSDictionary *dict2 = [self.someMutableArray objectAtIndex:indexPath.row]; 
NSLog(@"what is dict2 %@", dict2); 
cell.textLabel.text = [dict2 valueForKey:@"name"]; 

e setup моего JSON:

[ 
    -{ 
    id: 285, 
    name: name 1, 
    -loans: [ 
     -{ 
      id: 42, 
      name: "Shark" 
      } 
    ] 
    }, 
    -{ 
    id: 286, 
    name: name 2, 
    -loans: [ 
      -{ 
      id: 50, 
      name: "Flipper" 
      } 
     ] 
    } 
] 
+1

Пожалуйста, ваши JSON –

ответ

4

Почему вы собираетесь зацикливать, когда у вас уже есть массив? Просто выделить ваш массив с JSON ответ

NSArray *jsonDataArray = [[NSArray alloc] initWithArray:[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]]; 

этот массив будет ваш источник данных таким образом вернуть его количество от делегата и вы rowAtIndexPath

NSDictionary *dictObject = [jsonDataArray objectAtIndex:indexPath.row]; 
cell.textLabel.text = [dictObject valueForKey:@"Shark"]; 

Для пользовательских ячейки сделать как

NSDictionary *dictObject = [jsonDataArray objectAtIndex:indexPath.row]; 
cell.textLabel1.text = [dictObject valueForKey:@"Shark"]; 
cell.textLabel2.text = [dictObject valueForKey:@"Flipper"]; 
+0

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

+0

Я тебя не понял? – Retro

+0

Где я хочу, чтобы значение «Shark» и «Flipper» отображалось в моей таблице для моего примера JSON, ваш код дает мне «имя 1» и «имя 2» – myData

0

От мой пример:

My JSON Файл:

{ 
status: "Success", 
totalcount: "25", 
currentcount: "25", 
ticketreplies: [ 
    { 
ticket_id: "5348CD97", 
subject: "bA==", 
posteduser: "10025", 
postedby: "Admin (Paul)", 
message: "PGRpdj4", 
post_id: "75", 
posted_on: "23 Apr 2014 12:58 IST", 
photo: "10025.jpg" 
}, 
{ 
ticket_id: "5348F754", 
subject: "Y2FsbCBv", 
posteduser: "10025", 
postedby: "Admin (John)", 
message: "PGRpdj4", 
post_id: "74", 
posted_on: "23 Apr 2014 11:46 IST", 
photo: "10025.jpg" 
} 
    ] 
} 

Моя реализация:

self.dic_response=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; 
NSLog(@"Dictionary: %@",self.dic_response); 
NSLog(@"Dictionary: %i",[self.dic_response count]); 

NSString usrTicketId=[self.dic_response valueForKey:@"totalcount"]; 
NSLog(@"Ticket_Id: %@",usrTicketId); 

NSArray arrTicketRplys=[self.dic_response valueForKey:@"ticketreplies"]; 
NSLog(@"Ticket_Id: %@",arrTicketRplys); 

for(NSArray *tmpArr1 in arrTicketRplys){ 
    if([[tmpArr1 valueForKey:@"posteduser"] isEqualToString:@"10025"]){ 
     NSString *strPostUserName=[tmpArr1 valueForKey:@"postedby"]; 
     NSLog(@"Posted BY: %@", strPostUserName); 
    } 
} 

// Конечно, это будет логика работы для чтения определенных ключей объектов и значений. // В основном, этот код избегает статических значений, таких как objectAtIndex:4.

0
self.dic_response=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; 
if([self.dic_response valueForKey:@"success"]){ 
NSMutableArray *resultArray = [NSMutableArray alloc]; 
for(NSDictionary *tmpArr1 in self.dic_response){ 
{ 
    [resultArray addObject:tmpArr1]; 
    //this resultArray have whole array value. 
} 

} 

Надежда это помогает вам

0
for (int i = 0 ; i <jsonDataArray.count ; i++) 
{ 
    self.someDictionary = [[jsonDataArray objectAtIndex:i] objectForKey:@"loans"]; 
    [self.someMutableArray addObject:[self.someDictionary valueForKey:@"name"]] 
    NSLog(@"MutableArray inside is %@", self.someMutableArray);  
} 
NSLog(@"MutableArray outside is %@",self.someMutableArray); 

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