将JSON对象导入NSArray

问题描述:

尝试解析Objective-C中的此JSON对象并使用这些对象创建NSArray。 第一个值是一个计数器,并且对于该对象是特定的。所有其他值都是唯一的。将JSON对象导入NSArray

{ "myData": [ 
["1","1","110","dollar","8.0","2.8","0.1","11.6"], 
["2","1","110","euro","4.0","3.2","1.5","4.4"], 
["3","1","120","rupier","6.0","2.9","1.3","10.8"], 
["4","1","120","dinero","4.0","3.3","1.5","4.4"], 
["5","2","130","drahmer","8.0","2.9","1.3","11.2"], 
] } 

尝试这种代码:

NSDictionary* json = [NSJSONSerialization 
          JSONObjectWithData:myData 
          options:kNilOptions 
          error:&error]; 

    NSArray *currencyInformation = [json objectForKey:@"myData"]; 

但对象不存在。虽然阵列的数量为5

+3

如果[数组数]如预期的那样5,对象*在那里。你怎么知道他们不是? – 2012-03-18 20:59:02

+0

无法从阵列中读取它们。由于他们没有任何关于价值的描述,即。 “货币”:“美元”我无法将它们准备好...... – linge 2012-03-18 21:04:55

+0

'货币'在哪里?我根本没有在JSON中看到。向我们展示如何访问数组中的值。 (提示:他们自己会是NSArray的)。 – mattjgalloway 2012-03-18 21:20:55

在这个数据结构则需要通过指数如

for (NSArray *currency in currencyInformation) { 
    NSLog(@"Currency: %@", [currency objectAtIndex:3]); 
} 

访问的事情,如果你想通过密钥来访问的事情,那么你就需要你的JSON改变使用一组对象而不是一组数组。事情是这样的:

{ 
    "myData": [ 
     { 
      "primaryKey" : 1, 
      "currency" : "dollar", 
      <other keys + values>... 
     }, 
    ] 
} 

在这种情况下,你现在可以这样做:

for (NSDictionary *currency in currencyInformation) { 
    NSLog(@"Currency: %@", [currency valueForKey:@"currency"]); 
} 

数组中的每个对象本身就是一个数组,所以:

NSDictionary* json = [NSJSONSerialization 
         JSONObjectWithData:myData 
         options:kNilOptions 
         error:&error]; 

NSArray *currencyInformation = [json objectForKey:@"myData"]; 

for (NSArray *info in currencyInformation) { 
    // Then access each "column" with [info objectAtIndex:0,1,2,3,...] 
}