我应该如何格式化带有部分的 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的主要内容,如果未能解决你的问题,请参考以下文章