2016-09-16 60 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