【问题标题】:JSON to NSMutableArray iOSJSON 到 NSMutableArray iOS
【发布时间】:2015-06-13 11:58:52
【问题描述】:

作为对请求的响应,我得到 JSON:

{
    "letters": {
        "A": 0,
        "B": 1,
        "C": 2,
        "D": 3,
        "E": 4,
        ...
    }
}

这是我获取此 JSON 的代码:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

NSLog(@"%@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // Handle error
}];

我想用这样的键(不是值)填充数组:

数组[0] = "A"

数组[1] = "B" ...?

【问题讨论】:

  • Going from JSON to NSArray 的可能重复项
  • @sobolevn 错误示例 ....
  • @benji 谷歌它哥们。你正在尝试做的事情的例子比世界上所有海滩上的沙粒还要多:p
  • 我想,用什么代码来获取响应并不重要。

标签: ios objective-c json afnetworking afnetworking-2


【解决方案1】:
NSMutableArray *parts = [NSMutableArray new];

NSDictionary *allletters = [responseObject objectForKey:@"letters"];

for (NSString *key in [allletters allKeys])
{

    NSString *value = [allletters objectForKey: key];

    [parts insertObject:key atIndex:[val intValue]];
}

【讨论】:

  • 随便做 - [parts addObject:[allletters objectForKey:key]];
  • 是的,这也可以,但我发现用户是新的,所以我用简单的方式写了它。真的谢谢你。
  • 做不必要的事情如何更简单?
  • 这里用户不希望 0 索引上的“A”,而是希望索引上的 A 作为值。
【解决方案2】:

我还没有测试过代码。但应该是这样的:

NSDictionary *responseDictionary = (NSDictionary*)responseObject;

NSDictionary *letters = [responseDictionary objectForKey:"letters"];
NSMutableArray *lettersArray = [[NSMutableArray alloc]init];


if ( letters ){

for (NSInteger i = 0; i < letters; ++i)
{
  [lettersArray addObject:[NSNull null]];
}
[letters enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
                          usingBlock:^(id key, id object, BOOL *stop)     {
   [lettersArray replaceObjectAtIndex:[key integerValue] withObject:object]
}]

}

【讨论】:

    【解决方案3】:

    试试下面的代码

    NSDictionary *letters = [responseObject objectForKey:"letters"];
    NSArray *lettersArray = [letters allKeys];
    

    【讨论】:

      【解决方案4】:

      由于您已经在使用 JSON 响应序列化程序,因此 responseObject 应该是一个字典。

      要获取子字典letters 的所有键,请执行以下操作

      NSArray *letters = [reponseObject[@"letters"] allKeys];
      

      这里不需要可变数组。但是如果你想让它可变,那就做

      NSMutableArray *letters = [[reponseObject[@"letters"] allKeys] mutableCopy];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多