如图,想要取最后的字典的value,请问用什么方法比较简洁呢?
解决方案 »
- The identity 'iPhone Developer' doesn't match any valid, non-expired certificate
- [[UIApplication sharedApplication] keyWindow] addSubView aView,在viewBased程序中不成功
- VC++想做一个粒子效果
- vc获取iphone基本信息
- 将App程序发到App store
- unity3d ios开发 调试的流程?
- x-code运行不了一个简单的交互程序
- [NSThread isMainThread]返回值可靠吗
- 用live555+ffmpeg做iOS平台的实时视频播放
- wcf restful post 参数值为null
- iOS开发 lable自适应后有内边距怎么解决
- 搜狗iOS面试题
"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])
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"plistFile" ofType:@"plist"]; //plistFile是plist文件名
NSDictionary *data = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
NSString *StrCode = data[@"限定"][0][@"JP"];