如图,想要取最后的字典的value,请问用什么方法比较简洁呢?

解决方案 »

  1.   

    这是json数据的解析,解析这个有很多第三方啊,MJExtention、Mantle等等,想要取哪一层,直接把那一层字典转换成Model对象就好了
      

  2.   

    {
        "artworkUrl512": "http://is5.mzstatic.com/image/thumb/Purple62/v4/2a/26/39/2a263997-ccd9-0caf-f331-fe23951383a8/source/512x512bb.jpg",
        "ipadScreenshotUrls": [
            "http://a5.mzstatic.com/us/r30/Purple71/v4/7b/f5/36/7bf536f2-13f4-cc85-d25f-864676314828/screen480x480.jpeg",
            "http://a5.mzstatic.com/us/r30/Purple62/v4/77/9a/95/779a95ab-1639-d19f-e36b-7aee24107a82/screen480x480.jpeg",
            "http://a4.mzstatic.com/us/r30/Purple71/v4/e1/03/5f/e1035f33-afe8-8f30-4422-bb7613fb47a7/screen480x480.jpeg",
            "http://a4.mzstatic.com/us/r30/Purple71/v4/21/f7/4b/21f74bff-353b-babe-dad8-c95456a7677b/screen480x480.jpeg"
        ],
        "appletvScreenshotUrls": [],
        "artistViewUrl": "https://itunes.apple.com/cn/developer/halfbrick-studios/id356994313?uo=4",
        "artworkUrl60": "http://is5.mzstatic.com/image/thumb/Purple62/v4/2a/26/39/2a263997-ccd9-0caf-f331-fe23951383a8/source/60x60bb.jpg",
        "artworkUrl100": "http://is5.mzstatic.com/image/thumb/Purple62/v4/2a/26/39/2a263997-ccd9-0caf-f331-fe23951383a8/source/100x100bb.jpg",
        "kind": "software",
        "features": [
            "gameCenter",
            "iosUniversal"
        ],
        "supportedDevices": [
            "iPhone4",
            "iPad2Wifi",
            "iPad23G",
            "iPhone4S",
            "iPadThirdGen",
            "iPadThirdGen4G",
            "iPhone5",
            "iPodTouchFifthGen",
            "iPadFourthGen",
            "iPadFourthGen4G",
            "iPadMini",
            "iPadMini4G",
            "iPhone5c",
            "iPhone5s",
            "iPhone6",
            "iPhone6Plus",
            "iPodTouchSixthGen"
        ],
        "screenshotUrls": [
            "http://a1.mzstatic.com/us/r30/Purple62/v4/f4/ae/0c/f4ae0cca-46e7-d84f-53ad-aa809cf7fbf7/screen696x696.jpeg",
            "http://a5.mzstatic.com/us/r30/Purple62/v4/87/eb/18/87eb182e-4171-792d-51fd-b8f0c4345602/screen696x696.jpeg",
            "http://a5.mzstatic.com/us/r30/Purple62/v4/7a/b8/3f/7ab83f13-363e-5ed8-5e55-44231b8ab6b0/screen696x696.jpeg",
            "http://a3.mzstatic.com/us/r30/Purple62/v4/a9/dc/98/a9dc983c-6816-85de-f4b8-c9a12941a2f2/screen696x696.jpeg"
        ],
        "advisories": [],
        "isGameCenterEnabled": true,
        "fileSizeBytes": "114278400",
        "sellerUrl": "http://fruitninja.com/",
        "userRatingCountForCurrentVersion": 206,
        "trackContentRating": "4+",
        "averageUserRatingForCurrentVersion": 4,
        "languageCodesISO2A": [
            "EN",
            "ZH",
            "ZH"
        ],
        "trackCensoredName": "水果忍者 (官方正版 Fruit Ninja Free)",
        "trackViewUrl": "https://itunes.apple.com/cn/app/shui-guo-ren-zhe-guan-fang/id403858572?mt=8&uo=4",
        "contentAdvisoryRating": "4+",
        "minimumOsVersion": "7.0",
        "currency": "CNY",
        "wrapperType": "software",
        "version": "2.4.0",
        "artistId": 356994313,
        "artistName": "Halfbrick Studios",
        "genres": [
            "游戏",
            "娱乐",
            "街机游戏",
            "动作游戏"
        ],
        "price": 0,
        "description": "切水果,别切炸弹 – 这就是你体验令人欲罢不能的《Fruit Ninja》唯一需要记住的!从这里开始,探索“经典”、“禅宗”和粉丝最爱的“街机”模式的细微差别,从而精进你的切水果技能。努力切到最高分,使用强力道具和特殊香蕉让效果最大化,并在石榴狂切中拼命挥舞剑刃。\n\n来自 Fruitasia 神奇世界的多位角色将加入挑战。Katsuro 和 Mari 将在游戏过程中给你指导,带你从切水果新手成长为全能切片机!\n\n永远没有别的时光比玩《Fruit Ninja》更加畅爽,挥舞你的剑,从头开始尽情体验这款游戏的全新内容。这只是开始 – 我们已经等不及让每个人都加入我们的切水果大军!\n\n\n重要通知\n\n本游戏包含可选的应用内购买内容。你可以在设备的设置菜单中禁用此功能。\n\n前往 http://halfbrick.com/pp 阅读我们的隐私权政策\n前往 http://halfbrick.com/tos 阅读我们的服务条款",
        "bundleId": "com.halfbrick.FruitNinjaLite",
        "trackId": 403858572,
        "trackName": "水果忍者 (官方正版 Fruit Ninja Free)",
        "releaseDate": "2010-12-20T08:00:00Z",
        "primaryGenreName": "Games",
        "isVppDeviceBasedLicensingEnabled": true,
        "currentVersionReleaseDate": "2016-10-04T07:33:34Z",
        "releaseNotes": "本次更新包括修复一些bug和做出少许改进。欢迎您一如以往地向我们反馈宝贵意见。",
        "sellerName": "Halfbrick",
        "primaryGenreId": 6014,
        "formattedPrice": "免费",
        "genreIds": [
            "6014",
            "6016",
            "7003",
            "7001"
        ],
        "averageUserRating": 4.5,
        "userRatingCount": 207272
    }
    https://itunes.apple.com/search?term=game&country=cn&entity=software
    如上面所示:这是Apple的公开接口数据,返回是一个数组,我从中取了一条,一般获取数据后转成Model或者不转也可以,不用Modle的方法很简单,如果我要获取到上面@“ipadScreenshotUrls”数组的数据,可:NSArray *LSList = self.DataList[0][@"ipadScreenshotUrls"]
    如果要转成Model的话,可以用可以使用第三方框架,一般文档上都有嵌套字典或数组的方法,我在项目中常用的MJExtension,楼上那位兄弟你打错了一个字母:MJExtension,https://github.com/CoderMJLee/MJExtension文档上是有介绍的:官方的例子我直接就不粘贴了,用上面的JSON来说明,
    1、新建一个Modle类://
    //  Model.h
    #import <Foundation/Foundation.h>
    @interface Model : NSObject
    @property (nonatomic, copy) NSString *primaryGenreName;
    @property (nonatomic, copy) NSString *artworkUrl100;
    //@property (nonatomic, copy) NSString *sellerUrl;
    @property (nonatomic, copy) NSString *currency;
    @property (nonatomic, copy) NSString *artworkUrl512;
    @property (nonatomic, strong) NSArray<NSString *> *ipadScreenshotUrls;
    @property (nonatomic, copy) NSString *fileSizeBytes;
    @property (nonatomic, strong) NSArray<NSString *> *genres;
    @property (nonatomic, strong) NSArray<NSString *> *languageCodesISO2A;
    @property (nonatomic, copy) NSString *artworkUrl60;
    @property (nonatomic, strong) NSArray<NSString *> *supportedDevices;
    @property (nonatomic, copy) NSString *trackViewUrl;
    @property (nonatomic, copy) NSString *Description;
    @property (nonatomic, copy) NSString *version;
    @property (nonatomic, copy) NSString *bundleId;
    @property (nonatomic, copy) NSString *artistViewUrl;
    @property (nonatomic, assign) BOOL isGameCenterEnabled;
    @property (nonatomic, copy) NSString *wrapperType;
    @property (nonatomic, copy) NSString *releaseDate;
    @property (nonatomic, strong) NSArray<NSString *> *genreIds;
    @property (nonatomic, assign) NSInteger trackId;
    @property (nonatomic, copy) NSString *minimumOsVersion;
    @property (nonatomic, copy) NSString *formattedPrice;
    @property (nonatomic, copy) NSString * primaryGenreId;
    @property (nonatomic, copy) NSString *currentVersionReleaseDate;
    @property (nonatomic, copy) NSString * artistId;
    @property (nonatomic, copy) NSString *trackContentRating;
    @property (nonatomic, copy) NSString *artistName;
    @property (nonatomic, copy) NSString *price;
    @property (nonatomic, copy) NSString *trackCensoredName;
    @property (nonatomic, copy) NSString *trackName;
    @property (nonatomic, copy) NSString *kind;
    @property (nonatomic, strong) NSArray<NSString *> *features;
    @property (nonatomic, copy) NSString *contentAdvisoryRating;
    @property (nonatomic, strong) NSArray<NSString *> *screenshotUrls;
    @property (nonatomic, assign) BOOL isVppDeviceBasedLicensingEnabled;
    @property (nonatomic, copy) NSString *sellerName;
    @property (nonatomic, strong) NSArray<NSString *> *advisories;
    @end2、在Controller中用一个HomeDataList保存数据,在获取到数据后通过MJExtension框架把JSON转成Modle并保存到数组中: 
    /**
     *  apple公开接口
     */
    #define APPLE_SERVER @"https://itunes.apple.com/search?term=game&country=cn&entity=software"
    NSURL *url = [NSURL URLWithString:APPLE_SERVER];
        //POST请求,设置30S超时
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
        [request setHTTPMethod:@"POST"];
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                                    completionHandler:
                                          ^(NSData *data, NSURLResponse *response, NSError *error) {
                                              
                                              
                                              //在主线程中更新UI
                                              dispatch_async(dispatch_get_main_queue(), ^{
                                                  [MBProgressHUD hideHUDForView:self.view animated:YES];
                                                  if(data != nil)
                                                  {
                                                      NSDictionary *res = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                                                      NSLog(@"服务器返回的数据===%@",res);
                                                      self.HomeDataList = [Model mj_objectArrayWithKeyValuesArray: [res objectForKey:@"results"]];
                                                     
                                                  
                                                      //获取数据
                                               
                                                      //updata
                                                      
                                                      [self.collectionView reloadData];
                                                  }else
                                                  {
                                                      //如果获取失败
                                                      NSLog(@"请求失败=======%@",error);
                                                  }                                          
                                              });
                                              
                                          }];
        //使用resume方法启动任务
        [dataTask resume];3、从数组中取值:从JSON的结构来看,符合楼主说的字典里套数组在套字典的结构,整体是一个字典,字典理由一个数组,数组里存的是字典;
    通过Model取值,:Modle *MD =  self.HomeDataList[0];
    NSArry *LSList = MD.ipadScreenshotUrls
    4、使用:Modle *MD =  self.HomeDataList[0];
    NSArry *LSList = MD.ipadScreenshotUrls
    NSLog(@"=========%@",LSList[0])                            
      

  3.   

    请看Git上的demo,https://github.com/dengfeng520/layoutDemo.git
      

  4.   

    用楼主的数据来说明:
      
     NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"plistFile" ofType:@"plist"];  //plistFile是plist文件名
        NSDictionary *data = [[NSDictionary alloc] initWithContentsOfFile:plistPath];  
    NSString *StrCode = data[@"限定"][0][@"JP"];