2012-08-14 2 views
0

Ниже содержание находится в json.txtкак получить данные из этой структуры, JSONKit

{ 
    "data": [ 
     { 
      "keyId": 3, 
      "title": "This is a fundraiser 1", 
      "budget": "1000", 
      "users": { 
       "user": [ 
        { 
         "id": "3", 
         "first_name": "A1", 
         "last_name": "A11", 
         "is_owner": "false" 
        }, 
        { 
         "id": "2", 
         "first_name": "B1", 
         "last_name": "B11", 
         "is_owner": "true" 
        } 
       ] 
      }  
     } 
    ] 
} 

Что я делаю, чтобы получить idKey и title и budget является

@implementation Account 
@synthesize arr; 
-(void)parse { 
      NSString *filePath = [[NSBundle mainBundle] pathForResource:@"fundraiser_json" ofType:@"txt"]; 
      NSString *jsonString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 

      NSDictionary *dict = [jsonString objectFromJSONString]; 
      self.arr    = [dict objectForKey:@"data"]; 

      for (NSDictionary *acc in self.arr) { 

       Account *account  = [[Account alloc] init]; 

       [account setKeyID: [acc objectForKey:@"keyId"]]; 
       [account setTitle: [acc objectForKey:@"title"]]; 
       [account setBudget: [acc objectForKey:@"budget"]]; 
      } 
    }  

Тогда я пытаясь получить доступ к users и получить информацию о каждом user, но я не могу

Может кто-нибудь помочь мне, как доступа и получения этих данных.

+1

Вы считаете, что 'users' является массивом? Это не в данном JSON выше, это объект ('NSDictionary'). – Hejazi

ответ

3

Способ доступа к вашим пользовательским данным - это та же идея, что и доступ к данным вашей учетной записи. Во вложенной структуре вашего объекта JSON пользователи являются собственностью вашей учетной записи. Этот объект является словарем, который имеет одно свойство «пользователь», которое является массивом. Каждый элемент этого массива представляет собой объект, который имеет четыре свойства: id, first_name, last_name и is_owner.

Итак, когда вы анализируете свой объект, это всего лишь куча вложенных NSDictionaries и NSArrays. Вы можете сделать это следующим образом:

... 
for (NSDictionary *acc in self.arr) { 

    NSDictionary *users = (NSDictionary*)[acc objectForKey:@"users"]; 
    NSArray *userArray = (NSArray*)[users objectForKey:@"user"]; 

    for (NSDictionary *user in userArray) { 
     NSString *id = [user objectForKey:@"id"]; 
     NSString *firstName = [user objectForKey:@"first_name"]; 
     // etc. 
    } 
} 

EDIT: Я написал этот ответ разобрать ваш JSON, как вы имеете его в вашем вопросе, но если у вас есть контроль над этой структурой вы бы лучше (и будет иметь больший смысл) для свойства users является массивом, который непосредственно содержит словари пользовательских данных. Возможно, это именно то, что вы хотели сделать в первую очередь, и почему у вас возникли проблемы с получением данных.

+0

У меня возникли проблемы с получением «пользователей», потому что я не обращал внимания на то, что «пользователи» также были другим словарем. Спасибо за вашу помощь.. – tranvutuan

0

Когда вы преобразовываете строку в объект JSON, она создает древовидный тип данных с изменяемыми словарями и массивами. NSJSONSerialization Class Documentation резюмирует это довольно хорошо.

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

[[[[acc objectForKey:@"users"] objectForKey:@"user"] objectForKey:@"first_name"] objectAtIndex:0]; 

Я не уверен, однако, что я понял, ваша проблема или она решает это.

+0

должно быть '[[[[acc objectForKey: @" users "] objectForKey: @" user "] objectAtIndex: 0] objectForKey @" first_name "]]' – tranvutuan

+0

Правильно, потому что «пользователи» - это массив. Спасибо. – boomkin

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