从Objective C中的json对象获取值? [关闭]

Posted

技术标签:

【中文标题】从Objective C中的json对象获取值? [关闭]【英文标题】:Get Values From json Object in Objective C? [closed] 【发布时间】: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 谢谢...我会检查的 【参考方案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。但是你真的应该使用下标符号。

以上是关于从Objective C中的json对象获取值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从Objective C中的字符串获取JSON URL

如何在Objective C中使用NSData创建json对象?

如何从Objective c中的UITableView获取UILabel的多个值

如何从 json-rpc webservice 获取数据:iPad /iPhone / Objective C

如何获取嵌套 JSON 值并将其加载到 Tableview Objective c 中?

使用 Objective C 创建 JSON 数据并将其发送到服务器