2016-09-16 57 views
0

我正在編寫一個iOS應用程序(我的第一個),並且正在爲事件設計數據庫提要。這些事件按主題劃分爲邏輯分組。我希望swiftyJSON的最終遊戲能夠成爲一個包含章節和節標題的表格。一個可能的JSON的樣子,但我願意徹底改變它:我應該如何格式化傳入的JSON for UITableView與部分

{ 
"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"} 
    ] 
    } 
    ] 
} 

我想要做到的是提供一本字典,他們鍵的部分頭和行低於infomration的陣列按鍵。我只是iOS的新手,已經從JSON提要創建了一個表,但沒有從頭開始設計。

任何意見讚賞。

我已經接近了。

self.swiftyJsonVar = JSON(jJson) 

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

它打印

0 
{ 
    "SCHOOLS" : [ 

    ] 
} 

它循環罰款很好,但我不知道怎麼去鍵,然後在值之後...我關閉...;)

+0

對我來說看起來很好。您應該能夠輕鬆地將鍵作爲部分標題從中拉出。 – random

+0

你可以使用一種方便的方式http://www.jsoneditoronline.org來創建一個JSON並檢查各個字典值 –

+0

那些屬性名稱並不好。請閱讀以下https://google.github.io/styleguide/jsoncstyleguide.xml#Property_Name_Format – Simon

回答

0

我已將您的JSON放入本地文件中,並按以下方式解析。 您可以按照相同的方式解析它。 我已經採取了演示模型對象,以保持數據

斯威夫特版本:

我的模型對象看起來像

進口的UIKit

class ReceipeBO: NSObject { 


var headerValue : NSString! 
var arrEvents : NSArray! 

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

}

所以從您可以看到的模型對象,我保留headerValue屬性中的一個鍵d字典中arrEvents

這裏事件陣就是我從JSON響應獲取方法

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)"); 

}

現在來看看目標C版本:

我的模型物體看起來像

#import <Foundation/Foundation.h> 

@interface ReceipeBO : NSObject 

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


@end 

現在,在類似的方式JSON取功能上面所解釋的是如下

- (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"]); 
     } 
    } 
} 

輸出:

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 

希望它能幫助。

快樂編碼...

+0

我會試試這個,但是我認爲它現在可能超出了我的Objective-C知識。 – BostonMacOSX

+0

你在Objective C中編碼嗎? – Janmenjaya

+0

我已經更新了Objective C的答案,請檢查它。讓我知道它是否解決了您的問題。 – Janmenjaya