将iOS中的一列JSON文件解析为数组?

时间:2012-12-09 18:27:04

标签: ios xcode json

我设法使用JSON从我的网络服务器获取位置列表,并从应用程序中获取该文件。 我知道它可以获得等等,因为我也打印了NSLog,它出现在日志窗口的JSON中。

我的下一步是将这些值放入数组中,以便最终将它们显示到UIPickerView中。

有人建议如何最好地将它们从当前的JSON文件中导入数组吗?

Key是'name'。

我不能为我的生活让它循环并添加到数组;也许我做错了?

JSON数据如下所示:

[{"Name":"Aberdaron"},{"Name":"Aberdeen"},{"Name":"Aberdovey"},{"Name":"Aberporth"},{"Name":"Aberystwyth"},{"Name":"Albert-Bridge"},{"Name":"Aldeburgh"},{"Name":"Allington-Lock"},{"Name":"Alloa"},{"Name":"Amble"},{"Name":"Amlwch"},{"Name":"Annan-Waterfoot"},{"Name":"Anstruther-Easter"},{"Name":"Applecross"},{"Name":"Appledore"},{"Name":"Arbroath"},{"Name":"Ardglass"},{"Name":"Ardnave-Point"},{"Name":"Ardrossan"},{"Name":"Arklow"},{"Name":"Arnside"},{"Name":"Arrochar"}]

我到目前为止的代码是:

    NSString * urlString = [NSString stringWithFormat:@"http://localhost:8888/Locations.php"];
NSURL * url = [NSURL URLWithString:urlString];
NSData * data = [NSData dataWithContentsOfURL:url];
NSError * error;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"%@",json);

2 个答案:

答案 0 :(得分:0)

因此,您的JSON已经作为一个数组出现(表示您的键/值对包含在括号[ ]中)。假设您没有使用任何第三方JSON消费库,您可以使用iOS内置的NSJSONSerialization将JSON数据转换为Objective-C对象。你可能想要类方法+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error,它只需要一个指向某个NSData的指针,一个选项标志和一个指向NSError的指针。

请注意,该方法返回类型id,但由于您的JSON在数组中出现,请继续将其粘贴到数组变量中。现在,您有一个可以循环的NSDictionary数组。假设您的数组名为jsonDataArray,那么为您的选择器填充数组中所有名称的代码非常简单。当然,您可以创建一个NSMutableArray并循环遍历您的初始数组,将objectForKey:的结果从您的字典添加到可变数组中。

一种简单而优雅的方法将是简单的单行:

NSArray *names = [jsonDataArray valueForKey:@"Name"];

在数组上使用时,valueForKey将获取该键的对象的所有值。由于您的对象是NSDictionary s,因此值将是您所需要的值!

答案 1 :(得分:0)

第一个答案给出了如何解析数组并将其放入本机对象的良好描述。我编写了一个函数,它是NSString上的一个类别,您可以在下面使用它。假设您的数组存储在名为json的变量中,我将使用以下代码,给出您的示例:

NSMutableArray *nameArray = [NSMutableArray array];
for (NSDictionary *dictionary in json)
{
    [nameArray addObject:[dictionary valueForKey:@"Name"]];
}
NSLog(@"%@",nameArray);

现在nameArray是一个数组,其中包含与示例中给出的“name”键对应的所有值。