以下内容位于json.txt
{
"data": [
{
"keyId": 3,
"title": "This is a fundraiser 1",
"budget": "1000",
"users": {
"user": [
{
"id": "3",
"first_name": "A1",
"last_name": "A11",
"is_owner": "false"
},
{
"id": "2",
"first_name": "B1",
"last_name": "B11",
"is_owner": "true"
}
]
}
}
]
}
我要做的是idKey
和title
以及budget
@implementation Account
@synthesize arr;
-(void)parse {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"fundraiser_json" ofType:@"txt"];
NSString *jsonString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSDictionary *dict = [jsonString objectFromJSONString];
self.arr = [dict objectForKey:@"data"];
for ( NSDictionary *acc in self.arr ) {
Account *account = [[Account alloc] init];
[account setKeyID: [acc objectForKey:@"keyId"]];
[account setTitle: [acc objectForKey:@"title"]];
[account setBudget: [acc objectForKey:@"budget"]];
}
}
然后我尝试访问users
并获取其中每个user
的一些信息,但我不能
有人可以帮助我如何访问和获取这些数据。
答案 0 :(得分:3)
访问用户数据的方式与访问帐户数据的方式相同。在JSON对象的嵌套结构中,用户是您帐户的属性。该对象是一个具有一个属性的字典," user",这是一个数组。该数组的每个元素都是一个具有四个属性的对象:id,first_name,last_name和is_owner。
因此,在解析对象时,它只是一堆嵌套的NSDictionaries和NSArrays。你可以这样做:
...
for ( NSDictionary *acc in self.arr ) {
NSDictionary *users = (NSDictionary*)[acc objectForKey:@"users"];
NSArray *userArray = (NSArray*)[users objectForKey:@"user"];
for (NSDictionary *user in userArray) {
NSString *id = [user objectForKey:@"id"];
NSString *firstName = [user objectForKey:@"first_name"];
// etc.
}
}
编辑:我写了这个答案来解析你的JSON,就像你在问题中解决它一样,但如果你掌握了这个结构,那么对于用户属性你会更好(并且更有意义)是一个直接包含用户数据字典的数组。也许这就是你首先要做的事情,以及为什么你在获取数据时遇到了麻烦。
答案 1 :(得分:0)
当您将字符串转换为JSON对象时,它会生成一个树形结构的数据类型,其中包含可变的字典和数组。 NSJSONSerialization Class Documentation很好地总结了它。
我想如果你想访问例如列表中第一个用户的第一个名字,你需要编写方法调用:
[[[[acc objectForKey:@"users"] objectForKey:@"user"] objectForKey:@"first_name"] objectAtIndex:0];
我不确定我是否了解你的问题或解决了它。