我应该如何格式化带有部分的 UITableView 的传入 JSON

Posted

技术标签:

【中文标题】我应该如何格式化带有部分的 UITableView 的传入 JSON【英文标题】:How should I format incoming JSON for UITableView with sections 【发布时间】:2016-09-16 13:24:34 【问题描述】:

我正在编写一个 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" : [

  ]

它的循环也很好,但我不知道如何获取密钥,然后是之后的值......我很接近......;)

【问题讨论】:

对我来说看起来不错。您应该能够轻松地从中提取键作为部分标题。 您可以使用方便的方式jsoneditoronline.org 创建 JSON 并检查相应的 Dictionary 值 那些属性名不好。阅读此google.github.io/styleguide/… 您可以使用字典数组来保存 JSON 响应。就像创建一个带有值 title 和 start_date 的对象类,然后创建一个带有关键“学校事件”的字典并将对象类对象保存为值。然后将此字典添加到数组中。迭代这个单元所有已经解析的响应,然后使用这个数组来设置你的表格视图 【参考方案1】:

我已将您的 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

希望对你有帮助。

编码愉快...

【讨论】:

我会试试这个,但我认为它现在可能有点超出我的 Objective-C 知识。 你是用 Objective C 编码的吗?? 我也更新了 Objective C 的答案,检查一下。让我知道它是否能解决您的问题。 感谢所有帮助,但我已经更改了 JSON 的格式,所以我将重新发布,以免混淆此响应...

以上是关于我应该如何格式化带有部分的 UITableView 的传入 JSON的主要内容,如果未能解决你的问题,请参考以下文章

uitableview 中的多个原型单元,带有部分

UIScrollview有一个大视图,还是带有多个视图的UITableview?

带有Swift的多个自定义单元格的UITableview

带有 2 个部分选择的 UITableview

带有标题部分的插入分组 UITableView

如何设置 UITableView 部分保持固定?