如何对 JSON 项目进行排序/分组

Posted

技术标签:

【中文标题】如何对 JSON 项目进行排序/分组【英文标题】:how to Sort/Group JSON items 【发布时间】:2012-04-26 05:33:50 【问题描述】:

***更新问题****** JSON 数据是整周的 Gym Classes。

目前我正在下载 JSON 数据并将其保存到 An NSObject SearchResult,然后在我的 UItableviewController 上显示每个体育馆类一行。

但我想按天对项目(健身房课程)进行分组,并在自己的桌子上显示每一天。

所以我的问题是我是否需要按日期“DAY_OF_WEEK”对项目进行分组并将每一天存储到自己的数组中(MonArray ... SunArray)?

或者像我现在正在做的那样收集所有数据并将数组分类为每天的组?

我希望这是有道理的。

感谢您的帮助。

- (void)viewDidLoad 

[super viewDidLoad];

dispatch_async(kBgQueue, ^
    NSData* data = [NSData dataWithContentsOfURL: JsonURL];
    [self performSelectorOnMainThread:@selector(fetchedData:)
                           withObject:data waitUntilDone:YES]; );  

-(SearchResult *)parseTrack:(NSDictionary *)dictionary 
SearchResult *searchResult1 = [[SearchResult alloc] init];
searchResult1.day = [[dictionary objectForKey:@"post"] objectForKey:@"DAY_OF_WEEK"];
searchResult1.classType= [[dictionary objectForKey:@"post"] objectForKey:@"CLASS_TYPE"];
return searchResult1;



- (void)fetchedData:(NSData *)responseData  //parse out the json data

searchResults2 = [NSMutableArray arrayWithCapacity:10];

NSError* error;
NSDictionary* dictionary = [NSJSONSerialization
                      JSONObjectWithData:responseData //1 
                            options:kNilOptions error:&error];
NSArray *array = [dictionary objectForKey:@"posts"];

NSLog(@"array : %@",array);

if (array == nil) 
    NSLog(@"Expected 'posts' array");
    return;

for (NSDictionary *resultDict in array) 

    SearchResult *searchResult3;

    searchResult3 = [self parseTrack:resultDict];

    if (searchResult3 != nil) 
        [searchResults2 addObject:searchResult3];
    

    NSLog(@"day: %@, class: %@", [[resultDict objectForKey:@"post"] objectForKey:@"DAY_OF_WEEK"], [[resultDict objectForKey:@"post"] objectForKey:@"CLASS_TYPE"]);



[self.tableView reloadData];




- (void)viewDidUnload

[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;



 #pragma mark - Table view data source

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 

// Return the number of sections.
return 1;


 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 

// Return the number of rows in the section.
return searchResults2.count;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


SRCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SRCell1"];


// Configure the cell...


SearchResult *searchResult1 = [searchResults2 objectAtIndex:indexPath.row];
cell.daynameLabel.text = searchResult1.day;

return cell;

JSON 输出 NSlog

2012-04-26 06:12:51.256 passingdata[91699:fb03] array : (
    
    post =         
        "CLASS_LEVEL" = "Intro/General";
        "CLASS_TYPE" = "Muay Thai";
        "DAY_OF_WEEK" = Friday;
        ID = 19;
        "ORDER_BY" = 5;
        TIME = "1:00pm - 2:30pm";
    ;

    
    post =         
        "CLASS_LEVEL" = "General/Intermediate/Advanced";
        "CLASS_TYPE" = "Muay Thai Spar - Competitive";
        "DAY_OF_WEEK" = Friday;
        ID = 27;
        "ORDER_BY" = 5;
        TIME = "6:00pm - 9:00pm";
    ;
,
    
    post =         
        "CLASS_LEVEL" = "Fighters/Advanced/Intermediate";
        "CLASS_TYPE" = "Fighters Training";
        "DAY_OF_WEEK" = Monday;
        ID = 1;
        "ORDER_BY" = 1;
        TIME = "9:30am - 11:00pm";
    ;
,

【问题讨论】:

你可以检查这个以了解如何使用 sortDescriptor 对数组进行排序,然后你就可以轻松修复它 - ***.com/questions/805547/… 我在这里没有得到你需要的东西..你想解析 json 或其他任何东西 我刚刚更新了问题..谢谢 【参考方案1】:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"DAY_OF_WEEK" ascending:TRUE];
[sourceArr sortUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];

希望这会对你有所帮助。

【讨论】:

以上是关于如何对 JSON 项目进行排序/分组的主要内容,如果未能解决你的问题,请参考以下文章

json 路径语法对值进行排序

如何对项目进行分组然后遍历子组[重复]

剑道图表分组系列排序问题

对 TListView 对象中的项目进行分组?

Spark python如何使用特殊标记对RDD项目进行分组? [复制]

如何对DevExpress ASPxGridView进行分组排序