Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Objective c 在IOS中发出http请求并解析来自返回的json对象的特定数据_Objective C_Ios_Json - Fatal编程技术网

Objective c 在IOS中发出http请求并解析来自返回的json对象的特定数据

Objective c 在IOS中发出http请求并解析来自返回的json对象的特定数据,objective-c,ios,json,Objective C,Ios,Json,通过教程,我成功地发出了http请求并解析了obj-C中的json对象。不,从我得到的数据中,我想将前17个保存到一个数组中,并将项目从20-33保存到另一个数组中。问题是数据的顺序和我在http请求中的顺序不一样,而是在另一个请求中,所以我不能这样做,因为它们的顺序和应该的顺序不一样 这是我的密码: - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinish

通过教程,我成功地发出了http请求并解析了obj-C中的json对象。不,从我得到的数据中,我想将前17个保存到一个数组中,并将项目从20-33保存到另一个数组中。问题是数据的顺序和我在http请求中的顺序不一样,而是在另一个请求中,所以我不能这样做,因为它们的顺序和应该的顺序不一样

这是我的密码:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"connectionDidFinishLoading");
    NSLog(@"Succeeded! Received %d bytes of data",[self.responseData length]);

    // convert to JSON
    NSError *myError = nil;
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError];
    NSMutableArray *array_1 = [NSMutableArray array];
    NSMutableArray *array_2 = [NSMutableArray array];
    int index=0;

    // show all values
    for(id key in res) {
        index=index+1;
        id value = [res objectForKey:key];

        NSString *keyAsString = (NSString *)key;
        NSString *valueAsString = (NSString *)value;


       if (index<=17){
            [array_1 addObject:valueAsString];
            NSLog(@"%i: array 1 filling up: %@",index, keyAsString);
            NSLog(@"%@",array_1);

        } else if ((index>20)&&(index<=33)){
            [array_2 addObject:valueAsString];

        }
    }
}
-(void)连接dFinishLoading:(NSURLConnection*)连接{
NSLog(@“ConnectiondFinishLoading”);
NSLog(@“成功!接收到%d字节的数据,[self.responseData length]);
//转换为JSON
n错误*myError=nil;
NSDictionary*res=[NSJSONSerialization JSONObjectWithData:self.responseData选项:NSJSONReadingMutableLeaves错误:&myError];
NSMutableArray*数组_1=[NSMutableArray];
NSMutableArray*数组_2=[NSMutableArray];
int指数=0;
//显示所有值
for(在res中输入id){
指数=指数+1;
id值=[res objectForKey:key];
NSString*keyastring=(NSString*)键;
NSString*值字符串=(NSString*)值;

如果(index20)和&(index一个
NSDictionary
只是键与值的关联。键/值对没有顺序。可能的解决方案:

  • 在JSON数据中使用数组而不是字典作为顶级对象
  • 选择字典键的方式应确保可以对其进行排序
已添加

如果字典键是排序字符串,那么您可以

int index = 0;
NSArray *sortedKeys = [[res allKeys] sortedArrayUsingSelector: @selector(compare:)];
for (NSString *key in sortedKeys) {
    index = index + 1;
    NSString  *value = [res objectForKey:key];
    /* ... */
}

实现这一点没有简单的方法。正如NSDictionary的文档所述,字典中键的顺序是未指定的。如果您确实必须依赖项的顺序,可以使用JSON本身中的数组将它们包装起来(在解析过程中生成NSArray)或者创建NSDictionary的子类,使键顺序保持不变