2014-03-24 2 views
1

중첩 된 JSON에서 일부 값을 읽어야하며 제대로 읽을 수 없습니다.목표 C 중첩 된 JSON에서 읽는 방법

"addons" : [ 
     { 
     "group_title" : "Veggie Toppings", 
     "group_type" : "T", 
     "item_id" : "29", 
     "addon" : [ 
      { 
      "id" : "31", 
      "item_title" : "Ham" 
      }, 
      { 
      "id" : "32", 
      "item_title" : "Mushrooms" 
      } 
     ] 
     }, 
     { 
     "group_title" : "Meat Toppings", 
     "group_type" : "T", 
     "item_id" : "33", 
     "addon" : [ 
      { 
      "id" : "30", 
      "item_title" : "Sausage" 
      } 
     ] 
     } 

그리고 내 코드는 다음과 같습니다 : JSON은 다음과 같습니다

-(void)setData:(NSMutableDictionary *)menuItems{ 
    self.menuItem = menuItems; 
    // [GSDVActivityIndicator stopWithID:kNotificationHello]; 
    self.dictionaryOrder = [NSMutableDictionary dictionaryWithDictionary:[self.menuItem valueForKey:@"order"]]; 
    self.arrayPrices = [NSArray arrayWithArray:[self.menuItem valueForKey:@"price"]]; 
    self.arrayAddons = [NSArray arrayWithArray:[self.menuItem valueForKey:@"addons"]]; 
    self.myAddons = [NSArray arrayWithArray:[self.arrayAddons valueForKey:@"addon"]]; 

    [self setViewGUIData]; 

    NSLog (@"addons= %@", [self.arrayAddons valueForKey:@"Group_title]); 

    NSLog (@"addon = %@", [self.myAddons valueForKey:@"item_title"]); 

} 

그리고 그 결과는 다음과 같습니다

2014-03-24 19:48:04.446 [3698:70b] addons= (
    "Veggie Toppings", 
    "Meat Toppings" 
) 
2014-03-24 19:48:04.447 [3698:70b] addon = (
     (
     Ham, 
     Mushrooms 
    ), 
     (
     "Sausage" 
    ) 
) 

SO 문제는 두 번째 부분에있는 경우 항목 "햄, 버섯과 소시지 "는 형식이 잘못 되었기 때문에 읽을 수 없으며 라벨에 넣을 수 없습니다. 분명히이 선은 나쁘다 :

self.myAddons = [NSArray arrayWithArray:[self.arrayAddons valueForKey:@"addon"]]; 

그러나 나는 그것을 고치는 법을 모른다.

감사합니다.

+1

두 번째 nslog에는 "itemtitle"이 있지만 사전의 키는 "item_title"입니다. 어떻게 작동합니까? – Robert

+0

키 이름을 모국어로 사용하여 게시물을 편집했지만 문제가 아니며 Xcode에서 작동합니다.이 게시물의 철자가 잘못되었습니다. – user3194296

답변

1

정확하게 작업하고 있습니다. "addon"값은 [{"id" : "31", "item_title" : "Ham"}, {"id" : "32", "item_title" : "Mushrooms"}]{"id" : "30","item_title" : "Sausage"}이므로 valueForKey은이 두 값을 포함하는 배열을 제공합니다.

당신이 원하는 형식을 정확하게 말하지는 않지만, 평이한 목록을 원한다고 생각합니다. 당신은, 배열을 그룹을 반복하고, 각 부가 기능에 넣을 수 있습니다 :

[ 
    {"id" : "31", "item_title" : "Ham"}, 
    {"id" : "32", "item_title" : "Mushrooms"}, 
    {"id" : "30","item_title" : "Sausage"} 
] 
+0

대단히 고맙습니다. D : 이제 addon = ( 햄, 버섯, "Ameci Sausage" ) 따옴표가없는 햄과 버섯은 무엇입니까? – user3194296

+1

콘솔에 문자열을 표시 할 때 필요한 경우에만 따옴표를 사용합니다. Ameci Sausage는 공간이 있기 때문에 가져옵니다. – dokkaebi

1

이 dictionay 개체로 JSON 문자열을 프로젝트 파일에 JSONKit를 추가하고 설정 :

NSMutableArray* addons = [NSMutableArray array]; 
NSArray* groups = [self.menuItem valueForKey:@"addons"]; 
[groups enumerateObjectsUsingBlock:^(NSDictionary* group, NSUInteger idx, BOOL *stop) { 
    NSArray* addonsInThisGroup = group[@"addon"]; 
    [addonsInThisGroup enumerateObjectsUsingBlock:^(NSDictionary* addon, NSUInteger idx, BOOL *stop) { 
     [addons addObject:addon]; 
    }]; 
}]; 

이 초래 . json 데이터가 "responseString"이라는 이름으로 저장되어 있다고 가정 해 봅시다. 당신은이 작업을 수행해야한다 :

 NSArray *addons = [[NSArray alloc] init]; 
     addons = [[responseString objectFromJSONString] objectForKey: @"addons"]; 

는 이제 배열 애드온에서 당신은 키 "group_title", "group_type", "ITEM_ID"와 "부가 기능"과 사전 개체를해야합니다. "addon"키가있는 객체 내부에는 "id"및 "item_title"키가있는 두 개의 사전 객체 배열이 있습니다.

관련 문제