如何对此JSON进行排序
如何对此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;
}
如何解决这请大家指导以上。提前致谢。
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];
这是说没有选择器可用someSelectorWhichSortsByMonthOrder。我已经发布我的代码也请检查。 –
显然你需要决定你在那里使用哪个选择器,我不知道哪个选择器会根据月份进行排序,你可能需要编写一个方法 – wattson12
是的,我需要关心订单,因为我在表中显示几个月它开始从当前月份开始,所以值需要在各自的月份中显示。 –
我发现了一个问题previsouly张贴,希望这可以帮助你。 [json数组和排序](http://stackoverflow.com/questions/14601229/json-arrays-and-sorting) – Keeano