這段代碼源于一個加密需求,為了驗證接口加密的數(shù)據(jù)畏腕,需要把NSDictionary 轉(zhuǎn)為有序字符串缴川。
苦思冥想一下午,終于用遞歸完成了這個需求描馅。
+(NSString *)returnJsonstringwithObject:(id)aObject{
NSString * jsonStr = @"";
if ([aObject isKindOfClass:[NSDictionary class]]) {
NSString * jsonStr = [@"" stringByAppendingString:@"{"];
NSDictionary *tempDic = (NSDictionary *)aObject;
NSArray *tempKeys = [tempDic allKeys];
NSArray *keys = [tempKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return [obj1 compare:obj2];
}];
if (keys.count > 0) {
for (NSString *key in keys) {
jsonStr = [jsonStr stringByAppendingFormat:@"\"%@\":%@,",key,[self returnJsonstringwithObject:[tempDic objectForKey:key]]];
}
jsonStr = [jsonStr substringWithRange:NSMakeRange(0, jsonStr.length-1)];
}
jsonStr =[jsonStr stringByAppendingString:@"}"];
return jsonStr;
}else if ([aObject isKindOfClass:[NSArray class]]){
jsonStr =[jsonStr stringByAppendingString:@"["];
NSArray *tempArr = (NSArray *)aObject;
if (tempArr.count > 0) {
for (id object in tempArr) {
jsonStr = [jsonStr stringByAppendingFormat:@"%@,",[self returnJsonstringwithObject:object]];
}
jsonStr = [jsonStr substringWithRange:NSMakeRange(0, jsonStr.length-1)];
}
jsonStr= [jsonStr stringByAppendingString:@"]"];
return jsonStr;
}else{
jsonStr = [jsonStr stringByAppendingFormat:@"\"%@\"",aObject];
return jsonStr;
}
return jsonStr;
}
使用中如有問題把夸,請在評論里指出。