如何从数组中获取一个特定键的所有值?

时间:2016-11-23 10:19:11

标签: ios objective-c arrays

我正在使用Objective C开发应用程序。

我在服务器端的响应中得到以下数组(我使用1>------ Build started: Project: cpptest, Configuration: Debug Win32 ------ 1> cpptest.cpp 1>c:\work\cpptest\cpptest\cpptest.cpp(33): error C3861: 'proc1': identifier not found 的{​​{1}}方法。

Get

我想为键AFNetworking分隔值。

简而言之,我想要输出: Response from server: `[{"name":"option1","profile_id":0,"profile_name":"option1"},{"name":"option2","profile_id":0,"profile_name":"option2"},{"name":"option3","profile_id":0,"profile_name":"option3"},{"name":"option4","profile_id":0,"profile_name":"option4"},{"name":"option5","profile_id":0,"profile_name":"option5"},{"name":"option6","profile_id":0,"profile_name":"option6"},{"name":"option7","profile_id":0,"profile_name":"option7"},{"name":"option8","profile_id":0,"profile_name":"option8"},{"name":"option9","profile_id":0,"profile_name":"option9"},{"name":"option10","profile_id":0,"profile_name":"option10"}]`

为此,我尝试了以下方式:

将该响应存储在数组(name)中。然后尝试按以下方式分隔键[option1,option2,option3,option4,option5,option6,option7,option8,option9,option10]的值,

_arr

但不幸的是,这不起作用。应用程序崩溃并提供以下日志。

name

提前谢谢。

5 个答案:

答案 0 :(得分:1)

试试这个

NSMutableArray *arrOptions = [NSMutableArray new];
for (int i=0; i<_arr.count; i++) {
    [arrOptions addObject:[[_arr objectAtIndex:i] objectForKey:@"name"]];
}

此处arrOptions将包含您想要的输出。

答案 1 :(得分:1)

我可以看到您正在以JSON格式获得响应。因此,您可以将JSON转换为可变容器,如Dictionary和Arrays。在你的情况下,它是一系列字典。

NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];

if(!jsonArray)
{
  for(NSDictionary *dict in jsonArray)
  {
    NSLog(@"%@", dict valueForKey: @"name");
  }
}

答案 2 :(得分:1)

根据您下面的JSON数据,您需要使用NSDictionary而不是数组来存储数据。

[{
    "name": "option1",
    "profile_id": 0,
    "profile_name": "option1"
}, {
    "name": "option2",
    "profile_id": 0,
    "profile_name": "option2"
}, {
    "name": "option3",
    "profile_id": 0,
    "profile_name": "option3"
}, {
    "name": "option4",
    "profile_id": 0,
    "profile_name": "option4"
}, {
    "name": "option5",
    "profile_id": 0,
    "profile_name": "option5"
}, {
    "name": "option6",
    "profile_id": 0,
    "profile_name": "option6"
}, {
    "name": "option7",
    "profile_id": 0,
    "profile_name": "option7"
}, {
    "name": "option8",
    "profile_id": 0,
    "profile_name": "option8"
}, {
    "name": "option9",
    "profile_id": 0,
    "profile_name": "option9"
}, {
    "name": "option10",
    "profile_id": 0,
    "profile_name": "option10"
}]

使用dict获取数据:

NSDictionary *jsonDataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray *optionArray = [jsonDataDict valueForKey:@"name"]; 

问题:您正在尝试获取name密钥的数据,并将整个JSON数据存储在数组中。

  

数组不包含使用NSDictionary的键值对。

答案 3 :(得分:1)

实际上你的JSON响应以Array开头,所以喜欢

NSArray *ResponseArray = [NSJSONSerialization JSONObjectWithData: data options: KNilOptions error: nil];

NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in ResponseArray) {
[finalArray addObject:temp[@"name"]];
 }

AFNetworking的选择-2

   NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in responseObject) {
[finalArray addObject:temp[@"name"]];
 }

答案 4 :(得分:1)

你想要实现的目标和你的想法我可以说你正在走上正轨。 您已在NSDictionary中转换了响应数据,但它必须是数组。

java -cp test.jar "$OPTS" java.Test

这会将您的响应转换为数组,您可以使用

NSArray *responseArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

这将导致与@Krishna Kumar的答案相同的结果,但是通过这个,您将能够避免&#34;对于&#34;循环。