真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Json數(shù)據解析后分類思路-創(chuàng)新互聯(lián)

Json數(shù)據解析后分類思路

創(chuàng)新互聯(lián)建站是一家專業(yè)提供愛民企業(yè)網站建設,專注與成都網站制作、成都網站建設、html5、小程序制作等業(yè)務。10年已為愛民眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網站建設公司優(yōu)惠進行中。

代碼下載地址:    "大字典 2.zip"

http://vdisk.weibo.com/s/HzjOj

我們這里已從新浪微博中請求回來的數(shù)據作為例子。為了讓工程簡化,我將數(shù)據寫入到本地了。這里主要是為了學習如何將Json數(shù)據解析分類。

新浪微博請求返回來的數(shù)據大致格式如下:

{
    "statuses": [
        {
            "created_at": "Tue May 31 17:46:55 +0800 2011",
            "id": 11488058246,
            "text": "求關注。",
            "source": "新浪微博",
            "favorited": false,
            "truncated": false,
            "in_reply_to_status_id": "",
            "in_reply_to_user_id": "",
            "in_reply_to_screen_name": "",
            "geo": null,
            "mid": "5612814510546515491",
            "reposts_count": 8,
            "comments_count": 9,
            "annotations": [],
            "user": {
                "id": 1404376560,
                "screen_name": "zaku",
                "name": "zaku",
                "province": "11",
                "city": "5",
                "location": "北京 朝陽區(qū)",
                "description": "人生五十年,乃如夢如幻;有生斯有死,壯士復何憾。",
                "url": "http://blog.sina.com.cn/zaku",
                "profile_p_w_picpath_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
                "domain": "zaku",
                "gender": "m",
                "followers_count": 1204,
                "friends_count": 447,
                "statuses_count": 2908,
                "favourites_count": 0,
                "created_at": "Fri Aug 28 00:00:00 +0800 2009",
                "following": false,
                "allow_all_act_msg": false,
                "remark": "",
                "geo_enabled": true,
                "verified": false,
                "allow_all_comment": true,
                "avatar_large": "http://tp1.sinaimg.cn/1404376560/180/0/1",
                "verified_reason": "",
                "follow_me": false,
                "online_status": 0,
                "bi_followers_count": 215
            }
        },
        ...
    ],
    "previous_cursor": 0,                    // 暫未支持
    "next_cursor": 11488013766,     // 暫未支持
    "total_number": 81655
}

以上的示例來自新浪微博官網。我標出的紅色字體 ,是我們JSon解析分類的依據,他們都是字典,也就是說JSon解析分類的思路是按照字典去新建類,類與類之間的嵌套關系和JSon數(shù)據的格式相同,這我JSon解析的方法。

我來看一下代碼如何實現(xiàn)的:

新建User類用來存放user字典中的內容。

.h文件如下:

#import 
@interface User : NSObject
@property (strong, nonatomic) NSString* screen_name;
-(User*)initWithJsonDictionary:(NSDictionary*)dic;
+(User*)UserWithJsonDictionary:(NSDictionary*)dic;
@end

.m文件如下:

@implementation User
-(User*)initWithJsonDictionary:(NSDictionary *)dic
{
    if (self = [super init]) {
                                                                                                                                 
        self.screen_name = [dic objectForKey:@"screen_name"];
                                                                                                                                
    }
    return self;
}
+(User*)UserWithJsonDictionary:(NSDictionary *)dic
{
      //用這個類方法進行初始化的時候,都會alloc一次,因此就會新分配一塊空間
    return [[User alloc] initWithJsonDictionary:dic];
}

新建Status類用來存放statuses字典中的內容。

.h文件如下:

#import 
#import "User.h"
@interface Status : NSObject
@property (strong, nonatomic) NSString* userID;
//將多個字典嵌套的數(shù)據取出的思路是為每一個字典對應的建一個數(shù)據模型的類
//例如:User類
@property (strong , nonatomic) User* user;
-(Status*)initWithJsonDictionary:(NSDictionary*)dic;
+(Status*)statusWithJsonDictionary:(NSDictionary*)dic;
@end

.m文件如下:

@implementation Status
-(Status*)initWithJsonDictionary:(NSDictionary *)dic
{
    if (self = [super init]) {
        self.userID = [dic objectForKey:@"idstr"];
        NSDictionary* userDic = [dic objectForKey:@"user"];
        if (userDic) {
                                                                                                                     
            self.user = [User UserWithJsonDictionary:userDic];
                                                                                                                     
        }
                                                                                                                 
    }
    return self;
}
+(Status*)statusWithJsonDictionary:(NSDictionary *)dic
{
    //用這個類方法進行初始化的時候,都會alloc一次,因此就會新分配一塊空間
    return [[Status alloc] initWithJsonDictionary:dic];
}

為了模擬在真實項目中,獲得數(shù)據的類和顯示數(shù)據的類不在一個類中

我們新建一個試圖控制器用來顯示數(shù)據,我們顯示數(shù)據的位置是在控制臺。

OtherViewController.h代碼如下:

#import 
@interface OtherViewController : UIViewController
@property (strong , nonatomic) NSArray* statusArr;
@end

OtherViewController.m代碼實現(xiàn)如下:

//用來接收通過消息機制發(fā)送來的數(shù)據
-(void)getArray:(NSNotification*)aNotification
{
    self.statusArr = aNotification.object;
                                                                      
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //添加一個按鈕點擊顯示數(shù)據
    UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(30, 30, 30, 30);
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(displayUserInfo) forControlEvents:UIControlEventTouchUpInside];
}

-(void)displayUserInfo
{
    Status* status = [self.statusArr objectAtIndex:0];
    NSLog(@"status.userID = %@",status.userID);
    NSLog(@"status.user.screen_name = %@",status.user.screen_name);
}

最后,我們來看一下最后的一個類,我們從這個類中獲取數(shù)據,獲取數(shù)據的本地文件在代碼例子中。

ViewController.h代碼如下:

#import 
@interface ViewController : UIViewController
-(IBAction)changeVC:(id)sender;
@end

ViewController.m文件的代碼實現(xiàn)如下:

需要在Xib中拖一個Button與下面的方法相關聯(lián)

-(IBAction)changeVC:(id)sender
{
    //將JSON格式的數(shù)據文件的路徑找出
    NSString* path = [[NSBundle mainBundle] pathForResource:@"jsonTest" ofType:@"json"];
    //將數(shù)據放入NSData中
    NSData* data = [NSData dataWithContentsOfFile:path];
    //JSON解析
    NSDictionary* dic =  [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
//    NSLog(@"dic = %@",dic);
                                           
    NSArray* arr = [dic objectForKey:@"statuses"];
    NSLog(@"%d",arr.count);
    NSLog(@"arr = %@",arr);
                                              
                                              
    //初始化一個數(shù)組
    NSMutableArray* tempArr = [NSMutableArray array];
    //將數(shù)組中的字典放入Status模型中,大家在這里會有一個疑問將數(shù)組中的字典都放入模型中,怎么區(qū)分不同數(shù)組中的數(shù)據?
    for (NSDictionary* item in arr) {
        //答案在statusWithJsonDictionary:的類方法中見該方法注釋
        Status* status = [Status statusWithJsonDictionary:item];
        NSLog(@"item = %@ ",item);
                                                  
                                                  
                                                  
        //將Status類型的對象放入數(shù)組中
        [tempArr addObject:status];
    }
    //將tempArr數(shù)組通過消息中心發(fā)送到@"getArray" 這個名字的消息對應的方法中
    [[NSNotificationCenter defaultCenter] postNotificationName:@"getArray" object:tempArr];
                                              
                                              
                                              
                                              
    //切換視圖控制器
    [[NSNotificationCenter defaultCenter] postNotificationName:@"changeVC" object:nil];
}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


名稱欄目:Json數(shù)據解析后分類思路-創(chuàng)新互聯(lián)
網站地址:http://weahome.cn/article/dogscd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部