如何排序这个JSON

时间:2013-07-11 07:26:36

标签: iphone json

如何对这个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;
}

如何对此进行排序请注意以上内容。提前谢谢。

1 个答案:

答案 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];