2013-07-11 61 views
-3

如何對此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]); 
    } 
} 

這就是我想

NSArray *keys = [[getDataDict allKeys] sortedArrayUsingSelector: @selector(compare:)]; 

NSMutableArray *array = [NSMutableArray arrayWithCapacity: [keys count]]; 
for (NSString *key in keys) { 
    [array addObject: [getDataDict objectForKey: key]]; 
} 
NSLog(@"array:%@", array); 

下面是圖像描述的這一要求。 enter image description here 需要服務器來的方式相同,請爲上面的指導。提前致謝。

+0

服務器返回一個字典所以沒有秩序的密鑰的複雜的方式。你的意思是你需要從響應的JSON字符串中獲取訂單? – Wain

+0

**一個問題:**爲什麼你只需要它? – Bhavin

+0

再次詢問完全相同的問題是非常糟糕的形式。 – borrrden

回答

1

您的主要問題是您的JSON響應格式不正確。你的JSON響應中有許多不需要的東西。 看看你的JSON響應:

{ 
event: { 
      July: [ 
         { 
          createdSeatMap: "yes", 
          status: "1", 
          completed: "1", 
          eventPayment: "0", 
         } 
        ] 
     } 
} 

在你的情況event應該在不同月份的陣列事件。現在在每個數組中,您將擁有該月的所有事件。將密鑰(在上面的示例中,它是「July」)添加到數組作爲值,而不是將其作爲密鑰。看到你的反應應該是什麼樣子像例子:

{ 
event: { 
      [ 
        Month : "July",  <<--- //See this Line. 
        { 
         createdSeatMap: "yes", 
         status: "1", 
         completed: "1", 
         eventPayment: "0", 
        } 
      ] 
     } 
} 

當你的服務器返回一個字典,你的反應將永遠不會維持秩序。您應該如上所述從服務器端修改您的響應。

+0

你是對的格式是不正確的,但我沒有很好的知識的PHP如何處理這個什麼傳達給PHP開發人員。 –

+0

@ iPhone6:只要給他們我已添加的迴應。如果您的服務器的響應格式如此,那麼您的問題將得到解決。 – Bhavin

+0

上述答案都不符合要求,所以我根據我的要求完成了JSON的更改,這完全改變了問題。所以我也不能在這裏發表自己的答案,也不能接受任何上述答案。 –

3

排序字典

NSCalendar *calender = [NSCalendar currentCalendar]; 
NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setDateFormat:@"MMM"]; 

NSDateComponents *components = [NSDateComponents new]; 
components.month = 1; 

NSMutableArray *months = [@[] mutableCopy]; 

NSDate *date = [NSDate date]; 

[months addObject:[dateFormatter stringFromDate:date]]; 
while ([months count]<12){ 
    date = [calender dateByAddingComponents:components toDate:date options:0]; 
    [months addObject:[dateFormatter stringFromDate:date]]; 
} 
//A sample dictionary to test 
NSDictionary *dictionary = @{@"Jan": @"", 
          @"Feb": @"", 
          @"Mar": @"", 
          @"Apr": @"", 
          @"May": @"", 
          @"Jun": @"", 
          @"Jul": @"", 
          @"Aug": @"", 
          @"Sep": @"", 
          @"Oct": @"", 
          @"Nov": @"", 
          @"Dec": @""}; 

NSArray *keys = [[dictionary allKeys] sortedArrayUsingComparator: 
       ^NSComparisonResult(NSString * key1, NSString * key2) { 
    NSUInteger index1 = [months indexOfObject:[key1 substringToIndex:3]]; 
    NSUInteger index2 = [months indexOfObject:[key2 substringToIndex:3]]; 
    return [@(index1) compare:@(index2)]; 
}]; 

NSLog(@"keys : %@",keys); 
+0

在幾個月內給出什麼靜態數據或沒有得到什麼。 –

+0

@ iPhone6個月不是靜態數據,其動態形成。如果當前月份是七月。訂單將於明年7月份開始。如果它的十月份是十月份。基本的想法是有一個參考數組。你會根據它對鍵進行排序。 – Anupdas

相關問題