获取 nsdictionary 中特定键的值

Posted

技术标签:

【中文标题】获取 nsdictionary 中特定键的值【英文标题】:get values of particular key in nsdictionary 【发布时间】:2013-04-26 09:43:42 【问题描述】:

我将json 解析结果保存在dictionary 中,如下所示:


 "statusCode":"200",
"body":[
  
     "status":"success",
     "remarks":null
  
],

"data":[
     "abcd":[
        
           "category":"a",
           "title":"b",
           "id":"24"
        ,
        
           "category":"c",
           "title":"crd",
           "id":"65"
        ,
        
           "category":"ds",
           "title":"sd",
           "id":"18"
        

     ]
  ,
  
     "efgh":[
        
           "category":"ds",
           "title":"sd",
           "id":"18"
        ,
        
           "category":"sd",
           "title":"sd",
           "id":"1"
        

                             ]
  ,
  
     "ijkl":[
        
           "category":"ds",
           "title":"sd",
           "id":"18"
        ,
        
           "category":"sd",
           "title":"sd",
           "id":"1"
        

     ]
  
 ]

key @"data" 的数据可以使用

保存到数组中
NSMutableArray *getdata=[[NSMutableArray alloc]init];
getcat=[results objectForKey:@"data"];

现在我应该为第一个索引中的values(category, title, id) 做些什么,即"abcd"

如果有人知道,请看一下。

谢谢大家。

【问题讨论】:

【参考方案1】:

以下将为您提供所需的对象

NSDictionary *dict=[results valueForKeyPath:@"data.abcd"][0];

个人:

NSString *categoryString=[[results valueForKeyPath:@"data.abcd"][0] objectForKey:@"Category"];
NSString *idString=[[results valueForKeyPath:@"data.abcd"][0] objectForKey:@"id"];
NSString *titleString=[[results valueForKeyPath:@"data.abcd"][0] objectForKey:@"title"];

还有,

NSString *categoryString=dict[@"Category"];
NSString *idString=dict[@"id"];
NSString *titleString=dict[@"title"];

【讨论】:

我无法获取字典中的值,即类别、ID、标题。 nslog dict,如我的回答所示,并告诉打印的内容。 我通过 NSString *cat=[dict valueForKeyPath:@"id"][0]; 得到了内部键值这意味着获取特定键的所有 id,例如我必须使用 for 循环的“abcd”下的所有 id。 如何从数据中获取“abcd”键名?因为我想将“abcd”显示为我的 tableview 部分标题。在我的例子中,“abcd”和“efgh”是动态的。【参考方案2】:

像这样检查:

NSString *value=[[[getcate valueForKey:@"abcd"] objectAtIndex:0] valueForKey:@"category"];

【讨论】:

【参考方案3】:

这是一个数组,所以请使用objectAtIndex:(即[getcat objectAtIndex:0]getcat[0]

【讨论】:

是的,我已经这样做了.. NSMutableArray *firstarray=[getcat objectAtIndex:0]; "abcd":[ "category":"a", "title":"b", "id":"24" , "category":"c", "title":"crd", "id ":"65" , "category":"ds", "title":"sd", "id":"18" ] 但是现在如何在 abcd 中获取值,即类别、标题、id跨度> 那是另一本词典。我不明白为什么这会给这么多人带来这么多麻烦。你已经在这一行做了同样的事情 -> getcat=[results objectForKey:@"data"]; 所以再做一次。 JSON 不是火箭科学。你只能得到大约 5 或 6 种不同的类型,并且只有 两种 集合类型。所以集合要么是数组(按数字获取)​​,要么是字典(按字符串获取)。

以上是关于获取 nsdictionary 中特定键的值的主要内容,如果未能解决你的问题,请参考以下文章

哪种检查 NSDictionary 是不是包含特定键的方法更快?

返回具有多个键的 NSDictionary 中对象的值

具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?

解析 plist 文件并获取键的值

更新/更改存储在 NSArray 中的 NSDictionary 键的值

使用 NSPredicate 仅从字典数组中获取特定键的值