首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >json数组的iphone顺序

json数组的iphone顺序
EN

Stack Overflow用户
提问于 2011-07-28 05:22:35
回答 3查看 1.3K关注 0票数 0

我有一个iPhone应用程序,它从服务器获取json字符串并对其进行解析。它包含一些数据,例如,学校时间表信息。数据存储在nsdictionary中,然后传递到nsmuttablearray中。例如:

有没有人能告诉我正确的方向/告诉我如何访问数组的不同“根”?我希望将具有字段'Day‘的元素存储为’星期一‘(或者您可以告诉我如何对它们进行排序/搜索)。我花了相当多的时间试图找到关于这方面的一些信息(如何访问/更改嵌套值),但没有运气=/。谢谢..

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-28 08:49:20

要使用Day =星期一访问所有Dictionary对象,最好的办法是使用带有关键路径的谓词...

代码语言:javascript
运行
复制
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Day == 'Monday'"];
NSArray* mondayCourses = [rows filteredArrayUsingPredicate:predicate];

您也可以使谓词成为动态的。

代码语言:javascript
运行
复制
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Day == %@", dayOfTheWeek];

其中,dayOfTheWeek可以是一个在循环中保存当前日期的NSString,等等。

如果要对数组进行排序,可以使用排序描述符。

代码语言:javascript
运行
复制
NSSortDescriptor* idSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" 
                                                                   ascending:YES];
NSSortDescriptor* levelSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Level" 
                                                                      ascending:YES];
NSArray* sortedMondayRows = [mondayRows sortedArrayUsingDescriptors:[NSArray arrayWithObjects:idSortDescriptor, levelSortDescriptor, nil]];
票数 1
EN

Stack Overflow用户

发布于 2011-07-28 06:31:09

在URL:http://jsonlint.com/中检查您的JSON是否正确。如果它是正确的,请阅读如何通过谷歌解析JSON文件。您是否正在使用任何特定的框架来解析JSON文件?

票数 0
EN

Stack Overflow用户

发布于 2011-07-28 07:46:44

首先看一下苹果关于NSArrayNSDictionary的文档。在本例中,该数组(一个NSArray)包含许多NSDictionaries。

将数据存储在nsdictionary中,然后将其传递到nsmuttablearray。

首先,我必须注意到Objective-C中的变量只是指针。当你有这样一行代码时:

代码语言:javascript
运行
复制
NSMutableArray *rows;

您只需要说:“我希望这个变量指向一个NSMutableArray。”它相当于,

代码语言:javascript
运行
复制
id rows;

…在运行时,您不会被阻止将正则数组放入为可变数组声明的变量中(或将字符串放入为字典声明的变量中!)。看起来不错!但是,当您尝试对非可变数组执行可变操作,或对字符串执行字典操作时,您的程序将崩溃。

将它声明为指向NSMutableArray的指针,而不是id,有几个优点:

  • 它让XCode通过自动补全方法名来帮助你
  • 它让编译器在你试图调用方法时警告你NSMutableArray没有

所以,即使你的变量被声明为NSMutableArray *rows,在下面这一行:

代码语言:javascript
运行
复制
rows = [[dict objectForKey:@"courses"] retain];

…如果“课程”对象不是可变的,那么rows中的对象也不是可变的。相反,您可以这样做:

代码语言:javascript
运行
复制
rows = [[dict objectForKey:@"courses"] mutableCopy];

…获取您自己的数组的NSMutableArray副本(您必须释放它,就像保留原始的一样)。

您可以使用标准Cocoa代码探索数组和字典。以下是获取所有“星期一”课程的一种方法:

代码语言:javascript
运行
复制
NSMutableArray *mondayCourses = [NSMutableArray array];

for (NSDictionary* course in rows){
    if([[course objectForKey:@"Day"] isEqual:@"Monday"]){
        [mondayCourses addObject:course];
    }
}

(警告,我尚未运行此代码。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6851398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档