如何对这个json进行排序。下面的json在浏览器中输出。
{
event: {
July: [
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
}
],
Aug: [
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
}
],
Sept: [ ],
Oct: [ ],
Nov: [ ],
Dec: [
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
stamp: "1386019800"
},
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
stamp: "1387921620"
}
],
Jan: [ ],
Feb: [ ],
Mar: [ ],
Apr: [ ],
May: [ ],
June: [ ]
}
}
以下是在获取控制台时。
Apr = (
);
Aug = (
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
}
);
Dec = (
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
stamp: "1386019800"
},
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
stamp: "1387921620"
}
);
Feb = (
);
Jan = (
);
July = (
{
createdSeatMap: "yes",
status: "1",
completed: "1",
eventPayment: "0",
}
);
June = (
);
Mar = (
);
May = (
);
Nov = (
);
Oct = (
);
Sept = (
);
以下是我正在使用的代码
NSMutableArray *dictAllValues = [[NSMutableArray alloc]init];
NSMutableDictionary *getDataDict = [[NSMutableDictionary alloc]init];
getDataDict = [self.mGetDataDict valueForKey:@"event"];
NSArray *dictAllKeys = [[NSArray alloc] init];
dictAllKeys = [getDataDict allKeys];
NSLog(@"dict :%d", [dictAllKeys count]);
for(int i=0; i<[getDataDict count]; i++)
{
NSString *strKey = [dictAllKeys objectAtIndex:i];
[dictAllValues addObjectsFromArray:[getDataDict valueForKey:strKey]];
if(i==0)
{
NSArray *cVals = [dictAllValues valueForKey:strKey];
int c = [cVals count];
NSLog(@"values:%@", cVals);
NSLog(@"values:%@", dictAllValues);
[self.mArrMOneEvents addObject:[NSString stringWithFormat:@"%d", c]];
self.mArrMOneEtType = [dictAllValues valueForKey:@"type"];
self.mArrMOneEtTime = [dictAllValues valueForKey:@"time"];
self.mArrMOneEtSeatMap = [dictAllValues valueForKey:@"createdSeatMap"];
self.mArrMOneEtSeatId = [dictAllValues valueForKey:@"seatMapId"];
self.mArrMOneEtQuant = [dictAllValues valueForKey:@"quantity"];
self.mArrMOneEvents = [dictAllValues valueForKey:@"eventName"];
self.mArrMOneETLoc = [dictAllValues valueForKey:@"location"];
self.mArrMOneEtEId = [dictAllValues valueForKey:@"id"];
self.mArrMOneEtDesc = [dictAllValues valueForKey:@"description"];
self.mArrMOneEtDate = [dictAllValues valueForKey:@"date"];
self.mArrMOneEtCurr = [dictAllValues valueForKey:@"currency"];
self.mArrMOneEtCost = [dictAllValues valueForKey:@"cost"];
self.mArrMOneEtCateg = [dictAllValues valueForKey:@"category"];
self.mArrmOneEtImg = [dictAllValues valueForKey:@"banner"];
NSLog(@"array one:%d", [self.mArrMOneEvents count]);
}
}
+(NSString *)sendRequest:(NSMutableURLRequest *)request
{
NSHTTPURLResponse *response;
NSError *error;
NSData *responseData;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(responseData && [responseData length]) {
NSString* aStr;
aStr = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
return aStr;
}
else {
return @"No Record Found";
}
}
+(NSMutableDictionary *)forgotPassw:(NSDictionary *)mailId
{
NSString *urlStr = [NSString stringWithFormat:@"http://myvnt.co/api2/forgotpassword/%@",[mailId valueForKey:@"mailId"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString:
[urlStr stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding]]];
NSString *responseString = [MtApi sendRequest:request];
NSLog(@"response:%@", responseString);
NSError *error;
NSData *jsonData = [responseString dataUsingEncoding:NSUTF16StringEncoding];
NSDictionary *results = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithDictionary:results];
NSLog(@"dict in API-------------%@",dict);
return dict;
}
如何对此进行排序请注意以上内容。提前谢谢。
答案 0 :(得分:1)
JSON实际上是一个NSDictionary,它不是一个有序的集合。要获得一致的订购,您需要手动打印:
NSArray sortedKeys = [json keysSortedByValueUsingSelector:@selector(someSelectorWhichSortsByMonthOrder)];
[sortedKeys enumerateObjectsUsingBlock:^(NSString *month, NSUInteger idx, BOOL *stop){
NSLog(@"%@ = %@", month, json[month]);
}];
但话虽如此,订单并没有改变字典的内容,所以你有什么理由真正关心它在控制台上打印的样子吗?
编辑:因为你想要一个表视图的排序,这就是我要做的:
不要打扰上面的排序,只需定义一个包含月份名称的数组(按顺序)。在cellForRowAtIndexPath中:使用indexPath.row获取当前月份,然后您可以通过调用以下方式访问月份数据:
NSString *cellMonth = self.orderedMonthNames[indexPath.row];
NSDictionary *monthData = self.jsonDictionary[cellMonth];