0

我正在使用目标 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 找到了一种获取项目名称的方法?

4

6 回答 6

4

简单,遍历数组:

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

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

于 2013-05-22T06:56:31.417 回答
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
}
于 2013-05-22T06:59:11.537 回答
1

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

__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);
于 2013-05-22T07:01:21.840 回答
1

您可以使用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

于 2013-05-22T07:09:49.977 回答
0

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

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

像这样..

NSArray *projects = [json objectForKey:@"projects"];
for(NSDictionary *dict in projects)
    NSLog(@"Project Name: %@",[dict objectForKey:@"name"]);
于 2013-05-22T06:56:39.573 回答
0

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

 - (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"];
}
于 2013-05-22T07:00:12.087 回答