我应该如何使用节来格式化UITableView的传入JSON

时间:2016-09-16 13:24:34

标签: ios json uitableview

我正在编写一个iOS应用程序(我的第一个),并且还在从数据库中为事件设计提要。事件按主题划分为逻辑分组。我希望使用swiftyJSON的结束游戏成为一个包含节和节头的表。可能的JSON看起来像,但我愿意完全改变它:

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

我想要完成的是提供一个字典,其中键是节标题,行是键下方的信息数组。我刚接触iOS并且已经从JSON提要创建了一个表,但还没有从头开始设计。

任何建议表示赞赏。

我离得更近了。

 self.swiftyJsonVar = JSON(jJson)

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

打印

0
{
  "SCHOOLS" : [

  ]
}

它也可以很好地循环但是我不知道如何获得键然后是......之后的值......我很接近......;)

1 个答案:

答案 0 :(得分:0)

我已将JSON放在本地文件中,并按以下方式解析。 您可以按照相同的方式解析它。 我已经采用了一个演示模型对象来保存数据

Swift版本:

我的模型对象看起来像

导入UIKit

class ReceipeBO: NSObject {


var headerValue : NSString!
var arrEvents   : NSArray!

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

}

因此,从模型对象中可以看到,我在headerValue属性和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)");

}

现在来到Objective 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

希望它有所帮助。

快乐的编码......