2013-07-11 65 views
-2

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

如何解决这请大家指导以上。提前致谢。

+0

我发现了一个问题previsouly张贴,希望这可以帮助你。 [json数组和排序](http://stackoverflow.com/questions/14601229/json-arrays-and-sorting) – Keeano

回答

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]; 
+0

这是说没有选择器可用someSelectorWhichSortsByMonthOrder。我已经发布我的代码也请检查。 –

+0

显然你需要决定你在那里使用哪个选择器,我不知道哪个选择器会根据月份进行排序,你可能需要编写一个方法 – wattson12

+0

是的,我需要关心订单,因为我在表中显示几个月它开始从当前月份开始,所以值需要在各自的月份中显示。 –