【问题标题】:Get Values From json Object in Objective C? [closed]从Objective C中的json对象获取值? [关闭]
【发布时间】:2013-05-22 06:52:21
【问题描述】:

我正在使用目标 c,这是我的问题..

{
    "STATUS":"OK",
    "projects":
    [

    {

        "company":
        {
            "name":"ABC Pvt Ltd.","id":"12345"
        },
        "created-on":"2012-07-07T04:29:29Z",
        "category":
        {
            "name":"",
            "id":""
        },
        "starred":false,
        "name":"MY Platform 1",
        "startDate":"",
        "logo":"abc.png","notifyeveryone":false,
        "id":"70596",
        "last-changed-on":"2013-05-20T12:22:11Z",
        "status":"active",
        "endDate":""

    },

    {   
        "company":{
                    "name":"ABC Pvt Ltd.",
                    "id":"31222"
                   },
        "created-on":"2012-05-22T07:06:30Z",
        "category":{
                    "name":"","id":""
                    },
        "starred":false,
        "name":"Miscellaneous 1",
        "startDate":"",
        "logo":"abc.png",
        "notifyeveryone":false,
        "id":"12345",
        "last-changed-on":"2013-05-20T12:19:45Z",
        "status":"active",
        "endDate":""
    }
    ]
    }

以上是我从 asihttpRequest 检索的 json 字符串

现在我想显示项目名称 eg.MY Platform 1 和 Miscellaneous 1

我刚刚获得了一系列项目:

NSDictionary* json = [NSJSONSerialization
                          JSONObjectWithData:data //1

                          options:kNilOptions
                          error:&error];



   ProjectDetailsarray = [json objectForKey:"projects"];

现在任何人都可以告诉我如何在两行表格视图中获得上面提到的项目名称。

首先是我的平台 1 第二个是杂项1

我是目标 c 的新手,所以我试图解决,但 ddint 找到了获取项目名称的方法?

【问题讨论】:

  • 这里所有可用的答案都不是通用的并且容易出错。检查正确的方法here
  • 谢谢...我会检查的

标签: ios objective-c json cocoa-touch


【解决方案1】:

简单,遍历数组:

for (NSDictionary *project in json[@"projects"]) {
    NSLog(@"Project name: %@", project[@"name"]);
}

请注意,我使用的是下标符号而不是 [json objectForKey:@"projects"],后者要短得多。

【讨论】:

    【解决方案2】:

    你有一个字典数组。 如何从字典中获取值你应该知道:

    NSDictionary *dic = @{@"Name": @"Andrew", 
                          @"Surname": @"Kama", 
                          @"Age": @24, 
                          @"Friends":@[@"Lesly", @"John", @"Carter"]};
    
    NSString *name = dic[@"Name"];
    

    获取第二个朋友的名字:

    NSArray *friends = dic[@"Friends"];
    NSString *secondFriend = friends[1]; // or dic[@"Friends"][1];
    

    等等。

    您可以将 JSON 视为嵌套的 NSDictionaries/NSArrays。

    迭代项目:

    NSArray *projects = json[@"projects"];
    for (NSDictionary *project in projects) {
        NSLog(@"Project name: %@", project[@"name"]);
    
        // how to get company name?
        // project[@"company"][@"name"];
        // etc
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用Key-Value Coding 获取带有此代码的项目名称数组:

      NSArray *projectsNames = [json valueForKeyPath:@"projects.name"];
      

      此示例代码:

      NSArray *projectsNames = [json valueForKeyPath:@"projects.name"];
      NSLog(@"Projects names: %@", projectsNames);
      

      给出这个输出:

      Projects names: (
        "MY Platform 1",
        "Miscellaneous 1"
      )
      

      您可以在此处的文档中获取有关键值编码的更多信息:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html

      【讨论】:

        【解决方案4】:

        由于项目是一个数组,您可以枚举数组并通过其键获取项目名称,如下所示

        __block NSMutableArray *projectNameArray=[[NSMutableArray alloc] init];
        NSArray *projects = [json objectForKey:@"projects"];
        
        [projects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            NSLog(@"project %i %@",idx,[obj valueForKey:@"name"]);
            [projectNameArray addObject:[obj valueForKey:@"name"]];
        }];
        
        NSLog(@"project name array is %@",projectNameArray);
        

        【讨论】:

          【解决方案5】:

          您在 json 中有一系列项目。并且该数组包含字典。

          所以基本上首先你需要从数组中获取字典,然后你可以从字典中获取值。

          像这样..

          NSArray *projects = [json objectForKey:@"projects"];
          for(NSDictionary *dict in projects)
              NSLog(@"Project Name: %@",[dict objectForKey:@"name"]);
          

          【讨论】:

          • 为什么混合使用 -objectForKey 和 -valueForKey:?通常你会想要 -objectForKey:
          【解决方案6】:

          这很简单。只需从您的数组中获取这样的值:

           - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
          {
          
             static NSString *CellIdentifier = @"Cell";
          
              UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
              if (cell == nil)
              {
                  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
          
              }
          
              cell.textLabel.text = [[ProjectDetailsarray objectAtIndex:indexPath.row] objectForKey:@"name"];
          }
          

          【讨论】:

          • objectForKey,而不是 valueForKey。但是你真的应该使用下标符号。
          猜你喜欢
          • 2018-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-29
          相关资源
          最近更新 更多