2016-09-16 1 views
0

Ich schreibe eine iOS-App (meine erste) und entwerfe auch einen Feed von einer Datenbank für Ereignisse. Die Ereignisse sind in logische Gruppierungen nach Themen unterteilt. Ich möchte, dass das Endspiel mit swiftyJSON eine Tabelle mit Abschnitten und Abschnittsüberschriften ist. Eine mögliche JSON aussehen wird, aber ich bin bereit, es vollständig zu ändern:Wie formatiere ich eingehende JSON für UITableView mit Abschnitten

{ 
"events":[ 
    {"school events": 
    [ 
     {"title":"event1school","start_date":"01/01/01"}, 
     {"title":"eventschool2","start_date":01/02/01"} 
    ] 
    }, 
    {"town events": 
    [ 
     {"title":"event1school","start_date":"01/01/01"}, 
     {"title":"eventschool2","start_date":01/02/01"} 
    ] 
    } 
    ] 
} 

was ich versuche, ein Wörterbuch zu erreichen, ist zu liefern, wo sie Schlüssel der Abschnittsüberschriften sind und die Reihen sind die Anordnung von infomration unten die Schlüssel. Ich bin nur neu in iOS und habe eine Tabelle aus einem JSON-Feed erstellt, aber nicht von Grund auf neu erstellt.

Jeder Ratschlag geschätzt.

Ich bin näher gekommen.

self.swiftyJsonVar = JSON(jJson) 

       for(key,object) in self.swiftyJsonVar["events"]{ 
        print(key) 
        print(object) 
       } 

die druckt

0 
{ 
    "SCHOOLS" : [ 

    ] 
} 

Es Schleifen auch gut, aber ich bin nicht sicher, wie man die Schlüssel zu bekommen und dann, nachdem die Werte ... Ich bin in der Nähe ...;)

+0

das sieht gut aus für mich.Sie sollten in der Lage sein, Schlüssel als Abschnittsüberschriften daraus leicht herauszuziehen. – random

+0

können Sie einen bequemen Weg http://www.jsoneditoronline.org verwenden, um einen JSON zu erstellen und die entsprechenden Dictionary-Werte zu überprüfen –

+0

diese Eigenschaftennamen sind nicht gut. Lesen Sie hierzu https://google.github.io/styleguide/jsoncstyleguide.xml#Property_Name_Format – Simon

Antwort

0

Ich habe Ihre JSON in einer lokalen Datei genommen und auf folgende Weise geparst. Sie können den gleichen Weg verfolgen, um es zu analysieren. Ich habe ein Demo-Modell Objekt getroffen, um die Daten zu halten

Swift Version:

My Model Objekt sieht aus wie

Import UIKit

class ReceipeBO: NSObject { 


var headerValue : NSString! 
var arrEvents : NSArray! 

init(headerValue:NSString, arrEvents:NSArray) { 
    self.headerValue = headerValue; 
    self.arrEvents = arrEvents; 
} 

}

So aus das Modellobjekt, das Sie sehen können, halte ich den Schlüssel in headerValue Eigentum an d das Ereignis Array von Wörterbüchern in arrEvents

Hier ist das Verfahren, in dem ich von JSON-Antwort bin Abrufen

func getLocalJsonData() 
{ 
    let filePath = NSBundle.mainBundle().pathForResource("test", ofType: "json"); 

    let data = NSData.init(contentsOfFile: filePath!); 

    var json : NSArray! 
    var jsonTemp : NSDictionary = NSDictionary() 

    do{ 
     jsonTemp = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableLeaves) as! NSDictionary; 
    }catch{ 

    } 

    print("jsonTemp \(jsonTemp)"); 

    json = jsonTemp["events"] as! NSArray; 

    print("json \(json)"); 

    let arrEvents = NSMutableArray(); 

    for dictTemp in json 
    { 
     let key = dictTemp.allKeys.first as! String; 
     let arrValue = dictTemp[key] as! NSArray; 

     let receipe = ReceipeBO(headerValue: key, arrEvents: arrValue); 
     arrEvents.addObject(receipe); 
    } 

    print("evnts : \(arrEvents)"); 

}

kommen nun zu Objective-C-Version:

My Model Objekt sieht aus wie

#import <Foundation/Foundation.h> 

@interface ReceipeBO : NSObject 

@property (nonatomic, strong) NSString *headerValue; 
@property (nonatomic, strong) NSMutableArray *arrEvents; 


@end 

nun auf ähnliche Weise erklärt oberhalb der JSON Abruffunktion ist als unten

- (void)getLocalJsonData 
{ 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"]; 
    NSData *jsonData = [[NSData alloc] initWithContentsOfFile:filePath]; 

    NSDictionary *jsonTemp = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; 

    NSArray *json = jsonTemp[@"events"]; 

    NSMutableArray *arrEvents = [NSMutableArray array]; 

    for (NSDictionary *dictTemp in json) { 
     ReceipeBO *receipe = [[ReceipeBO alloc] init]; 

     NSString *key = [dictTemp.allKeys firstObject]; 
     receipe.headerValue = key; 
     receipe.arrEvents = dictTemp[key]; 

     [arrEvents addObject:receipe]; 
    } 

    //Access or fetching part 

    for (ReceipeBO *objReceipe in arrEvents) { 
     NSLog(@"Section header : %@", objReceipe.headerValue); 

     for (NSDictionary *dictEvent in objReceipe.arrEvents) { 
      NSLog(@"Event title %@ : Event start date %@", dictEvent[@"title"], dictEvent[@"start_date"]); 
     } 
    } 
} 

Ausgang:

Section header : school events Event title event1school : Event start 
date 01/01/01 Event title eventschool2 : Event start date 01/02/01 
Section header : town events Event title event1school : Event start 
date 01/01/01 Event title eventschool2 : Event start date 01/02/01 

Hoffe, es hilft.

Happy Codierung ...

+0

Ich werde dies ausprobieren, aber ich denke, es kann ein bisschen über meine Ziel-C-Kenntnisse jetzt sein. – BostonMacOSX

+0

Codieren Sie es in Objective C? – Janmenjaya

+0

Ich habe die Antwort für Objective C aktualisiert, überprüfen Sie es. Lass es mich wissen, wenn es dein Problem löst. – Janmenjaya

Verwandte Themen