
第一步:创建两个模型类(模型类集成NSObject)
Snip20161215_101png
FKGoodsOrderModel文件内容如下
// h文件==============================#import <Foundation/Foundationh>@class FKGoodsModelInOrder;@interface FKGoodsOrderModel : NSObject@property(nonatomic, assign) double sumPrice;@property(nonatomic, assign) double sumCurrency;@property(nonatomic, assign) NSInteger sumNumber;@property(nonatomic, assign) NSInteger orderStatus;@property(nonatomic, copy) NSString barName;@property(nonatomic, strong) NSMutableArray <FKGoodsModelInOrder >products;@end// m文件(重点)==============================#import "FKGoodsOrderModelh"@implementation FKGoodsOrderModel+ (NSDictionary )mj_objectClassInArray {// 表明你products数组存放的将是FKGoodsModelInOrder类的模型
return @{ @"products" : @"FKGoodsModelInOrder",
};
}@end
FKGoodsModelInOrder文件内容如下:
// h文件==============================#import <Foundation/Foundationh>@interface FKGoodsModelInOrder : NSObject@property(nonatomic, assign) NSInteger MethodPay;@property(nonatomic, assign) double price;@property(nonatomic, assign) NSInteger number;@property(nonatomic, copy) NSString name;@property(nonatomic, copy) NSString attribute;@property(nonatomic, copy) NSString img;@property(nonatomic, copy) NSString createTime;@end// m文件(啥都没写)#import "FKGoodsModelInOrderh"@implementation FKGoodsModelInOrder@end第二步:在返回上图数据的控制器中,导入这两个头文件
#import "FKGoodsOrderModelh"#import "FKGoodsModelInOrderh"第三步:利用外层模型(FKGoodsOrderModel)调用MJExtension的mj_objectArrayWithKeyValuesArray:responseObject[@"data"]方法
selfgoodsOrderModelArray = [FKGoodsOrderModel mj_objectArrayWithKeyValuesArray:responseObject[@"data"]];至此结束
字典不记录顺序。 你可以另外建一个列表 keys=[] 在构建字典的同时把键填到这个key中 dic[1234]="你好" keysappend(1234) 取字典的时候用keys里的有顺序的键 print(dic[keys[0]]) print(dic[keys[1]])
可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对。而在OC我们要用字典(Dictionary)来存储,当然了Java用的是Map来存储键值对。 网络请求有get和post方法
Dictionary是一组定义好的key:value键值对,并不是任意字符串都可以转换成为Dictionary的。
通常字符创需要满足某种格式,比如json,可以通过SBJson等工具转换
//从plist文件中读取数据
- (void)readDataFromPlist
{
//1先获取文件路径
NSString filePath = [[NSBundle mainBundle] pathForResource:@"Book" ofType:@"plist"];
//2根据路径初始化字典对象
selfdic = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
//将不可边字典变成可变字典
selfaddressBook = [NSMutableDictionary dictionaryWithDictionary:_dic];
//将字典封装成对象
//(1)从字典中遍历出key
for (NSString key in selfdic) {
//根据key获取对应的数组
NSArray groupArr =selfdic[key];
//(5) 创建可变的小数组,存储封装的对象
NSMutableArray newGroupArr = [NSMutableArray array];
//(3)获取小数组中元素(遍历小数组)
for (NSDictionary groupDic in groupArr) {
//(4)通过字典初始化AddressPerson
AddressPerson Person = [[AddressPerson alloc]initWithDic:groupDic];
[newGroupArr addObject:Person];//将对象存储到新的可变数组中
RELEASE_SAFE(Person);
}
//将要原来key对应的存储字典的小数组替换成装有对象的心得可变的数组
[selfaddressBook setObject:newGroupArr forKey:key];
}
//取出字典中所有的key
selforderedKeys= [[selfaddressBook allKeys]sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"%@",addressBook);
}
不是很明白你的意思,网络请求不该传json吗?什么叫id类型的字典,你是想说键值对吧,为什么不指明数据类型呢,不要滥用id哦。
if ([object isKindOfClass [NSMutabledictionary class]]) {
NSMutabledictionary dic = (NSMutabledictionary )object;
[object setObject: 新增元素内容 for key:新增元素key]
}
手写的代码,当然你的id数据可能不是NSMutabledictionary 而是NSDictionary,自己转一下好了。
Swift 语言
如果说您说的是创建一个可以存储 nil 和 数字 类型的字典,那就是把字典定义为
var dict = [String:Int]() //这里是整数,可以适当更改类型,只要在类型后面加一个就行了
然后就可以像平常一样用了,比如
dict["key"] = nil
或是
dict["anotherKey"] = 1
当然你也可以在最开始就赋值,如果包含nil应该能够自动判断类型
在日常开发中,将网络请求中获取的 JSON 数据转为数据模型,是我们开发中必不可少的 *** 作。
通常我们会选用诸如 YYModel 、 JSONModel 或者 MJExtension 等第三方框架来实现这一过程。这些框架实现原理的核心就是 Runtime 和 KVC ,以及 Getter / Setter 。
实现的大体思路如下:借助 Runtime 可以动态获取 成员列表 的特性,遍历模型中所有属性,然后以获取到的属性名为 key ,在 JSON 字典中寻找对应的值 value ;再使用 KVC 或直接调用 Getter / Setter 将每一个对应 value 赋值给模型,就完成了字典转模型的目的。
从这份 JSON 中可以看出,字典中取值除了 字符串 之外,还有 数组 和 字典 。那么在将字典转换成数据模型的时候,就要考虑 模型嵌套模型 、 模型嵌套模型数组 的情况了。
经过分析,我们总共需要三个模型: XXStudentModel、XXAdressModel、XXCourseModel。
NSObject+XXModelh、NSObject+XXModelm 就是我们用来解决字典转模型所创建的分类,协议中的 + (NSDictionary )modelContainerPropertyGenericClass 方法用来告诉分类特殊字段的处理规则,比如 id --> uid。
以上就是关于iOS:字典数组中有字典数组怎么解析全部的内容,包括:iOS:字典数组中有字典数组怎么解析、ios怎么把一个字典按字母顺序遍历输出、ios怎么取出数组中的某个字典等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)