2012-08-14 4 views
0
다음

가 json.txt에있는 콘텐츠입니다, JSONKit

내가 idKeytitlebudget을 얻을 뭐하는 거지
{ 
    "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" 
        } 
       ] 
      }  
     } 
    ] 
} 

는 내가 그런

@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 객체의 중첩 구조에서 사용자는 계정의 속성입니다. 이 객체는 하나의 속성 인 "user"를 갖는 사전입니다. 해당 배열의 각 요소는 id, first_name, last_name 및 is_owner의 네 가지 속성이있는 객체입니다.

개체를 구문 분석 할 때이 개체는 중첩 된 NSDictionaries 및 NSArrays 일뿐입니다. 나는 당신의 JSON 당신이 당신의 질문에이 방법을 구문 분석이 대답을 썼다, 그러나 당신이이 구조의 제어가 있다면 당신은 더 나을 것 (그리고 :

... 
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. 
    } 
} 

편집 : 당신은 이런 식으로 작업을 수행 할 수 있습니다 사용자 속성이 사용자 데이터 사전을 직접 포함하는 배열이되도록하는 것이 좋습니다. 어쩌면 당신이 처음에해야 할 일이고 왜 데이터를 가져 오는 데 어려움을 겪고 있는지도 모릅니다.

+0

'사용자'도 다른 사전이기도하다는 점에 유의하지 않았기 때문에 '사용자'를 얻는 데 어려움을 겪고있었습니다. 당신의 도움을 주셔서 감사합니다.. – tranvutuan

0

문자열을 JSON 객체로 변환하면 변경 가능한 사전과 배열이있는 트리 구조 데이터 유형이됩니다. NSJSONSerialization Class Documentation은 그것을 아주 잘 요약합니다. 내가 이해가 비록 잘 모르겠어요

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

:

당신은 예를 들어 액세스하려는 경우 내 생각, 목록의 첫 번째 사용자의 이름, 당신은 메서드 호출을 작성해야합니다 귀하의 문제 또는 그것을 해결합니다.

+0

objectContKey @ "first_name"]]' – tranvutuan

+0

"users"가 배열이기 때문에, 오른쪽 :'[[[acc objectForKey : @ "사용자"] objectForKey : @ "사용자"] objectAtIndex : 0] 고맙습니다. – boomkin

관련 문제