我设法使用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);
答案 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”键对应的所有值。