2016-12-19 22 views
6

Szukałem od około dwóch godzin i wydaje się, że nikt nie ma jasnego wyjaśnienia, jak odczytywać plik JSON w Objective C.Odczytaj plik JSON w Objective C

powiedzmy mam pliku JSON nazwie colors.json, patrząc tak:

{ 
    "colors": [{ 
     "name": "green", 
     "pictures": [{ 
      "pic": "pic1.png", 
      "name": "green1" 
     }, { 
      "pic": "pic2.png", 
      "name": "green2" 
     }] 
    }, { 
     "name": "yellow", 
     "pictures": [{ 
      "pic": "pic3.png", 
      "name": "yellow1" 
     }] 
    }] 
} 
  1. Gdzie mogę skopiować ten plik w mojej ścieżce XCode?

  2. Jak uzyskać programowo ten plik?

  3. Po tym pliku - Jak odczytać wartość name dla każdego obiektu colors?

  4. Jak mam powiedzieć "dla każdego obrazu w kolorze o nazwie green, uzyskać wartość name w NSString"?

Próbowałem kilka metod, ale jeszcze nie doszli do wniosku. Czy po prostu rozumiem pojęcie błędnego JSON?

+0

Spróbuj [to] (https://www.google.de/search?client=firefox-b-ab&q=objc+read+json&spell=1&sa=X&ved = 0AHUKEwi5173o0IDRAhXDthQKHbFGAP4QvwUIGigA). – shallowThought

+2

cóż, szczerze mówiąc, musisz szukać źle. Zamiast szukać wszystkiego w jednym, wyszukaj w następujący sposób: 1. Jak dodać plik do mojego projektu Xcode? 2. Jak czytać plik programowo za pomocą celu c? 3. Jak cofnąć archiwizację pliku JSON C? – dirtydanee

+0

Czy naprawdę sądzisz, że zadałbym tutaj pytanie, gdybym już tego nie zrobił? – Ikeaner

Odpowiedz

16

Wystarczy przeciągnąć plik JSON do panelu nawigatora projektu w Xcode, aby pojawił się w tym samym miejscu, co pliki klas.

Należy zaznaczyć pole wyboru "Kopiuj elementy w razie potrzeby" i dodać je do właściwych miejsc docelowych.

Następnie zrobić coś takiego:

- (void)doSomethingWithTheJson 
{ 
    NSDictionary *dict = [self JSONFromFile]; 

    NSArray *colours = [dict objectForKey:@"colors"]; 

    for (NSDictionary *colour in colours) { 
     NSString *name = [colour objectForKey:@"name"]; 
     NSLog(@"Colour name: %@", name); 

     if ([name isEqualToString:@"green"]) { 
      NSArray *pictures = [colour objectForKey:@"pictures"]; 
      for (NSDictionary *picture in pictures) { 
       NSString *pictureName = [picture objectForKey:@"name"]; 
       NSLog(@"Picture name: %@", pictureName); 
      } 
     } 
    } 
} 

- (NSDictionary *)JSONFromFile 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"colors" ofType:@"json"]; 
    NSData *data = [NSData dataWithContentsOfFile:path]; 
    return [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
} 
+0

Dziękujemy! Właśnie tego potrzebowałem, jesteś zbawicielem życia! :) – Ikeaner