最近碰到一个问题
接口返回的是json,转化为了字典,需要按照顺序显示value
众所周知 字典是无序的 那怎么按照key出现的顺序显示value呢?
思路
1.json转化为字典dic1
2.取出所有的key,生成数组keys,遍历keys,将json根据key分割字符串,取出第0个数据作为新字典的key,原来的key作为value,变成新的字典dic2
3.dic2中取出所有的key,生成数组keys,keys按照长短取出数据,短的就是在前面,长的在后面,最后遍历根据dic2生成新的数组
4.遍历数组,根据dic1得到需要的数组
代码如下
.h中的代码
+ (NSArray *)getResultArray:(NSString *)result;
.m中的代码
//1.转化为json
+ (NSArray *)getResultArray:(NSString *)result
{
//1.转化为json
if (result == nil) {
return @[];
}
NSData *jsonData = [result dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
if(err) {
NSLog(@"json解析失败:%@",err);
return @[];
}
//2.得到所有的key
NSArray *keys = [dic allKeys];
NSMutableDictionary *needDic = [NSMutableDictionary dictionary];
for (NSString *key in keys) {
if ([result containsString:key]) {
//3.取出字符串通过key 得到的前面的字符串 并保存到新的字典中
NSArray *arr = [result componentsSeparatedByString:key];
NSString *lenth = arr[0];
[needDic setValue:key forKey:lenth];
}
}
//4.遍历得到字符串中按照循序出现的keys
NSMutableArray *needKeys = [NSMutableArray array];
NSArray *a0 = [[needDic allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSUInteger len0 = [(NSString *)obj1 length];
NSUInteger len1 = [(NSString *)obj2 length];
return len0 > len1 ? NSOrderedDescending : NSOrderedAscending;
}];
[a0 enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[needKeys addObject:needDic[obj]];
}];
//5.取出数据
NSMutableArray *examTXArr = [NSMutableArray array];
[needKeys enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[examTXArr addObject:dic[obj]];
}];
return examTXArr;
}
例子:
NSDictionary *dic = @{@"id2":@"11111",@"id1":@"2222",@"id3":@"33333"};
NSError *parseError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
NSString *str1 = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSArray *arr1 = [NSArrayTools getResultArray:str1];
例子中key 的可变的,这里根据key出现的顺序得到value并生成新的数组
最后arr1如下
Printing description of examTXArr:
<__NSArrayM 0x6000037a0180>(
11111,
2222,
33333
)
网友评论