2011-11-04 56 views
1

我正在为我的iPhone应用程序使用SBJSONParser。到目前为止,我一直在解析简单的json字符串,例如:["Business1","Business2"]iPhone SDK:解析JSON的问题

我现在使用PHP从同一个json字符串中的数据库中获取业务名称和业务ID,所以我的PHP给了我结果是这样的:

{"business_1A" : "ABC_1","businees_2A": "ABC_2" } 

下面是我目前使用来处理第一JSON输出的正常工作代码:

businessNames是在下面的代码一个NSMutableArray。

NSString *businessNamesJSON = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"businessNamesJSON.php"]]]; 

SBJsonParser *parser = [[SBJsonParser alloc]init]; 
businessNames = [[parser objectWithString:businessNamesJSON error:nil]copy]; 

基本上,我要拆分的第二JSON输出,这样我可以有两个单独的NSMutableArrays,其中一个包含了企业名称和持有的ID其他。 如何提取或拆分第二个JSON输出,以便我可以执行此操作?

在此先感谢。

回答

0

{"business_1A" : "ABC_1","businees_2A": "ABC_2" }以JSON术语定义了一个对象,它将作为Objective-C中的NSDictionary由任何理智的JSON解析器返回,这是一个从一个对象到另一个对象的映射的集合。

你似乎想要分别获得所有的键和所有的值。在这种情况下,你可以从NSDictionary让他们:

SBJsonParser *parser = [[SBJsonParser alloc] init]; 
businessNamesDictionary = [parser objectWithString:businessNamesJSON error:nil]; 

NSLog(@"names: %@", [businessNamesDictionary allKeys]); 
NSLog(@"values: %@", [businessNamesDictionary allValues]); 

采取mutableCopy■如果你想他们。使用objectsForKeys:notFoundMarker:如果你想保证这些值的出现顺序与密钥相同 - 每个文件的顺序在文档中都没有明确定义,所以不要依赖你在任何版本的操作系统上发生的任何顺序进行测试。

+0

好的,谢谢,所以如果我想分配businessIDS到businessIDS NSMutableArray,我只是做businessIDS = [businessNamesDictionary allValues]; ? – EI756

+0

这不会是一个可变数组,你不会得到一个拥有引用,所以你可能想'[[businessNamesDictionary allValues] mutableCopy]'拥有结果,并且它是可变的。 – Tommy

1

海兰有

让我退后一步。既然你有公司的列表岂不是一种更好的方式与JSON数组像这样来表示你的数据:

[ 
    { 
     "identifier": "ABC_1", 
     "name": "business_1A" 
    }, 
    { 
     "identifier": "ABC_2", 
     "name": "businees_2A" 
    } 
] 

我相信这将使得数据的解析您更容易和它将允许您在将来添加更多属性。

所以一旦你有这个结构,你可以解析JSON数据,然后遍历这些条目并分别提取键identifiername(在这种情况下)的值。