Xcode如何解析Json对象

Posted

技术标签:

【中文标题】Xcode如何解析Json对象【英文标题】:Xcode how to parse Json Objects 【发布时间】:2012-05-05 10:11:27 【问题描述】:

我设法为我的服务器获取 Json 并在 Xcode 中解析,然后我可以将 Json 转换为对象并加载我的 uitableview,问题是我的 Json 有 7 个对象..

你可以看到full Json here

2012-05-05 10:45:02.727 passingdata[63856:fb03] array : 
    posts =     
        Friday =         (
                        
                GymClass =                 
                    "CLASS-TYPE2" = "";
                    "CLASS_LEVEL" = "Intro/General";
                    "CLASS_TYPE" = "Muay Thai";
                    "DAY_OF_WEEK" = Friday;
                    TIME = "13:00 - 14:30";
                ;
            
        );
        Monday =         (
                        
                GymClass =                 
                    "CLASS-TYPE2" = "Fighters Training";
                    "CLASS_LEVEL" = "Fighters/Advanced/Intermediate";
                    "CLASS_TYPE" = "Muay Thai ";
                    "DAY_OF_WEEK" = Monday;
                    TIME = "09:30 - 11:00";
                ;
            , ......

使用此代码,我可以获得星期五的“星期五”并在我的桌子上显示 GymClass 信息“GymClass”

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

    searchResults2 = [NSMutableArray arrayWithCapacity:10];

    NSError* error;
    NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

    NSLog(@"array : %@",dictionary);
    NSArray *array = [[dictionary objectForKey:@"posts"] objectForKey:@"Friday"]; // retrieve that Day Gym Classes

    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];
                
        
    [self.tableView reloadData];


- (SearchResult *)parseTrack:(NSDictionary *)dictionary

    SearchResult *searchResult1 = [[SearchResult alloc] init];

    searchResult1.classType= [[dictionary objectForKey:@"GymClass"] objectForKey:@"CLASS_TYPE"];
    searchResult1.classLevel= [[dictionary objectForKey:@"GymClass"] objectForKey:@"CLASS_LEVEL"];

    NSLog(@"parse track = %@", searchResult1);
    return searchResult1;

我可以获取一天的元素,但我如何获取每天(周一、周二...周日)的元素,以便我可以按部分显示在我的桌子上?

感谢您的帮助..

【问题讨论】:

【参考方案1】:

在您的代码中,您已经在这样做了:

NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

NSLog(@"array : %@",dictionary);
NSArray *array = [[dictionary objectForKey:@"posts"] objectForKey:@"Friday"]; // retrieve that Day Gym Classes

文可以从那里开始只检索对象posts

NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSDictionary *posts = [dictionary objectForKey:@"posts"];

//Iterate over posts

for (NSArray *aDay in posts)
     //Do something 
     NSLog(@"Array: %@", aDay);

在这里,我使用快速枚举来遍历字典,你应该检查这个here。

【讨论】:

嗨,我知道如何获取“星期五”一天的信息,我只是不知道如何获取所有日子的信息.. @HernandoZ 看看第二段代码。我没有使用Friday,只是遍历所有 非常感谢,如果我使用快速枚举,我需要做什么?将每一天保存到 NSArray ?那么我将有 7 个数组来收集信息? ,很抱歉很痛苦,你能解释一下我应该遵循什么过程来在一个按天部分排序的表格中获取所有天信息,我知道如何为我为“星期五”所做的一个数组执行此操作,但使用多个数组?感谢您的帮助.. @HernandoZ 您只能使用数组posts 作为表视图的数据源。段数就是数组的大小,每个段的行数就是n数组的大小。 @Jonathan Nuñez Aguin 还有一个问题,我如何将数组帖子划分为日间部分?感谢您的帮助。

以上是关于Xcode如何解析Json对象的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 解析 JSON 返回 NULL

xcode如何等到json数据解析?

Xcode iOS:如何解析这个 JSON?

解析 Json Xcode

如何使用 Swift 2 + XCode 7 + iOS 9 获取和解析 JSON [重复]

单对象 json 解析 - 我做错了啥?