【问题标题】:Parse JSON array in Objective-C在 Objective-C 中解析 JSON 数组
【发布时间】:2015-07-09 18:03:49
【问题描述】:

我已经设法从一些 json 中提取了以下数组(我将其转储到控制台)。如何获取并打印出其中一个元素的值,即任务?

目标-C:

NSArray *array = [dict objectForKey:@"row"];
        NSLog(@"array is: %@",array);

控制台输出:

数组是:{ 0 = 1; 1 = "发送电子邮件"; 2 = "带附件"; ltask = "带附件"; task = "发送邮件"; 用户 ID = 1; }

【问题讨论】:

    标签: ios objective-c json parsing


    【解决方案1】:

    array 看起来它实际上是一个NSDictionary,因此请引用键来获取它的值。

    NSLog(@"Task: %@", array[@"task"]);
    

    【讨论】:

    • 上述目标 c 打印出控制台中显示的输出,所以我认为它是有效的。我将如何捕获并打印出任务的价值,即“发送电子邮件”。
    • 我的代码行应该打印出“发送电子邮件”。但是如果你想为它使用一个变量,那么你可以做id value = array[@"task"];,然后打印value
    • 当我在答案中输入代码时,我得到红色错误“在类型'NSArray'的对象上找不到打印字典元素的预期方法”与id值相同的错误
    • NSArray 将使用括号() 打印到控制台,而NSDictionary 将使用大括号{} 打印到控制台。控制台输出中的花括号告诉我arrayNSDictionaryarray 可以吗?如果是这样,那么您将需要使用isKindOfClass: 方法来正确处理不同的类型。
    • 好的。你是对的,它不是一个数组,它是一个字典。但是,我用 NSArray *array = ... 将其称为数组,这似乎是错误的来源。我正在投票您的答案,并接受 Subbu 的以下引起冲突的答案。
    【解决方案2】:

    变量数组似乎不是 NSArray 。这对你有用吗?

        id  array = [dict objectForKey:@"row"];
    
        if([array isKindOfClass:[NSDictionary class]]){
            NSLog(@"Value of task %@",array[@"task"]);
        }
    

    【讨论】:

    • 是的,谢谢。解析的原始代码来自不同的 json,它们确实以数组开头,但在这种情况下,它是一个字典。谢谢。
    【解决方案3】:

    从日志看来,输出是一个NSDictionary 对象,所以要获取任务键的值,只需这样做

    NSDictionary *myDict = dict[@"row"];
    NSString *task = myDict[@"task"];
    NSLog(@"task = %@", task);
    

    如果您想确认,只需使用isKindOfClass: 方法检查类类型

    if([dict[@"row"] isKindOfClass:[NSDictionary class]]) {
    
        NSDictionary *myDict = dict[@"row"];
        NSString *task = myDict[@"task"];
        NSLog(@"task = %@", task);
    
    } else if([dict[@"row"] isKindOfClass:[NSArray class]]) {
    
        NSArray *myArray = dict[@"row"];
        NSDictionary *myDict = myArray[0];
        NSString *task = myDict[@"task"];  
        NSLog(@"task = %@", task);
    
    }
    

    【讨论】:

      【解决方案4】:

      试试

              if ([[dictionary allKeys] containsObject:@"row"]) {
                  NSObject *objRow = dictionary[@"row"];
                  if(objRow){
                      if([objRow isKindOfClass:[NSArray class]]){
                           NSArray *arr = (NSArray *)objRow;
                           ....
                      }
                      if([objRow isKindOfClass:[NSDictionary class]]){
                           NSDictionary *dic = (NSDictionary *)objRow;
                           ....
                      }
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        • 2023-03-31
        • 2017-03-12
        • 1970-01-01
        相关资源
        最近更新 更多