【问题标题】:How to put the Dictionary values to an array?如何将字典值放入数组?
【发布时间】:2017-01-25 04:30:19
【问题描述】:

我是Objective-C的新手,请帮我解决这个问题,我有一本这样的字典

Async JSON: (
        {
        "cus_name" = cus1;
        "cus_id" = 001;
    },
        {
        "cus_name" = cus2;
        "job_id" = 002;
    }
)

但我需要与此相同的输出:

Async JSON:(
        (
        cus1,
        001
    ),
        (
        cus2,
        002
    )
)

请帮我解决这个问题,这是我使用的代码:

 NSData *cityData = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:strURL]];

__block NSDictionary *json;
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                           json = [NSJSONSerialization JSONObjectWithData:data
                                                                  options:0
                                                                    error:nil];
                           NSLog(@"Async JSON: %@", json);
                       }];

【问题讨论】:

  • 您的响应是数组而不是字典,我想您想将字典数组转换为嵌套数组。对吗?
  • @Nirav D 谢谢,是的,你是对的,我需要嵌套数组中的输出,就像我上面提到的那样......
  • @Rob 这就是我的要求,这就是为什么,请帮我解决这个问题

标签: ios objective-c arrays json dictionary


【解决方案1】:

你在这里犯了错误,你的JSON响应不是Dictionary它是字典数组,如果你想转换它的嵌套数组,试试这样。

__block NSMutableArray *nestedArray = [NSMutableArray array];
[NSURLConnection sendAsynchronousRequest:request
                               queue:[NSOperationQueue mainQueue]
                   completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                       NSArray *json = [NSJSONSerialization JSONObjectWithData:data
                                                              options:0
                                                                error:nil];

                    for (NSDictionary* dic in json) {
                        NSMutableArray *subArray = [NSMutableArray array];
                        [subArray addObject:[dic objectForKey:@"cus_name"]];
                        if ([dic objectForKey:@"cus_id"]) {
                            [subArray addObject:[dic objectForKey:@"cus_id"]];
                        }
                        if ([dic objectForKey:@"job_id"]) {
                            [subArray addObject:[dic objectForKey:@"job_id"]];
                        }
                        [nestedArray addObject:subArray];
                    }

                   }];

注意:NSURLConnection 已弃用,我建议您像这样使用NSURLSession

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

[[session dataTaskWithRequest:request 
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

     // do stuff and access the data here

}] resume];

【讨论】:

  • 谢谢 Nirav 但是我在这一行遇到了一个错误:nestedArray.addObject(subArray),它说在 NSMutableArray 的对象类型中找不到 addobject
  • @Tela 欢迎朋友 :)
  • 我对您的回答和解释投了赞成票
  • @Nirav D 不,我点击它并说接受,对不起,我对堆栈溢出完全陌生,可能是我犯了错误。现在我再次接受了:)
  • @Tela 没关系,它发生了 :) 欢迎 SO :)
猜你喜欢
  • 2021-10-27
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多