Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 接收来自服务器的相同JSON响应_Iphone_Ios - Fatal编程技术网

Iphone 接收来自服务器的相同JSON响应

Iphone 接收来自服务器的相同JSON响应,iphone,ios,Iphone,Ios,如何对这个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: [ {

如何对这个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]);
    }
}
下图描述了本系统的要求。
需要响应的方式与来自服务器的响应方式相同,请为上述内容提供指导。提前感谢。

您的主要问题是JSON响应格式不正确。JSON响应中有许多不需要的东西。 看看您的JSON响应:

{
event: {
            July: [
                      {
                          createdSeatMap: "yes",
                          status: "1",
                          completed: "1",
                          eventPayment: "0",
                      }
                  ]
       }
}
在您的情况下,事件应该是不同月份的一系列事件。现在,在每个数组中,您将拥有该月的所有事件。将上面示例中的键作为值添加到数组中,而不是将其设置为键。请参见您的响应的示例:

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

当服务器返回字典时,您的响应将永远无法维持顺序。您应该按照上述从服务器端修改响应。

一种对字典键进行排序的复杂方法

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);

服务器正在返回字典,因此没有订单。你的意思是你需要从响应的JSON字符串中获取顺序?一个问题:为什么你只想按这个顺序?再次问完全相同的问题是非常糟糕的形式。@Vin我已经编辑了我的问题,请检查,我需要这个,因为我正在显示从当前月份开始的一年中的十二个月,每个月可能有也可能没有事件。所以表视图是按月设置的,因此需要按顺序使用json。@Borrden我知道,但如果只是想得到答案,当我得到答案时,我会自己删除另一个。在月份中给出什么静态数据或没有得到什么。@iPhone6 month不是静态数据,它是动态形成的。如果当前月份是7月。订单将是7月到明年6月。如果是10月,则月份将是10月到9月。基本想法是有一个参考数组。您可以根据它对密钥进行排序。您是对的,格式不正确,但我对php不太了解,不知道如何处理这个问题。请告诉php开发人员。@iPhone6:请给出我添加的响应。如果您的服务器响应格式如下,那么您的问题将得到解决。上述答案都不符合要求,因此,我根据我的要求对JSON进行了更改,从而完全改变了问题。所以我既不能在这里发布我自己的答案,也不能接受上面的任何答案。@iPhone6:这就是我在答案中提出的建议,这就是为什么我的答案是最相关的。我没有做你的更改,在JSON中,某处月份的名称是完整的,而某处是简短的,因此我所做的是将所有名称更改为全名,然后自动获取排序数据。
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);