2015-04-01 61 views
0

我使用php来获取json数据,这里是响应。如何在iOS中解析复杂的JSON数据

{"array":[{"Category":{"charity_id":"2","charity_name":"GiveDirectly","charity_amt":"0.20"}}]} 

,这里是我的Objective-C代码

NSError *err; 
NSURL *url=[NSURL URLWithString:@"url"]; 
NSURLRequest *req=[NSURLRequest requestWithURL:url]; 
NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:&err]; 

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err]; 

if ([json isKindOfClass:[NSDictionary class]]){ 
    NSArray *yourStaffDictionaryArray = json[@"array"]; 
    if ([yourStaffDictionaryArray isKindOfClass:[NSArray class]]){ 
     for (NSDictionary *dictionary in yourStaffDictionaryArray) { 

      for(NSDictionary *dict in dictionary[@"Category"]){ 

       NSLog(@"%@",[[((NSString*)dict) componentsSeparatedByString:@"="] objectAtIndex:0]); 


      } 

     } 
    } 
} 

但这仅返回名称不是值。我在这个网站上搜索了大部分的问题,但没有任何帮助。请帮助我,我是iOS新手。

感谢

字典输出

{ 
"charity_amt" = "0.20"; 
"charity_id" = 2; 
"charity_name" = GiveDirectly; 
} 
+0

复杂吗?你还没有见过*复杂*! – 2015-04-01 12:27:51

回答

1

你不需要做ComponentSeparatedByString。一旦你获得@“Category”的NSDictionary,你可以通过使用它的键来获得它的值。

喜欢的东西

if ([json isKindOfClass:[NSDictionary class]]){ 
    NSArray *yourStaffDictionaryArray = json[@"array"]; 
    if ([yourStaffDictionaryArray isKindOfClass:[NSArray class]]){ 
     for (NSDictionary *dictionary in yourStaffDictionaryArray) { 

      NSDictionary *dict = dictionary[@"Category"]; 
      NSLog(@"%@",dict[@"charity_id"]); 
     } 
    } 
} 
+0

它给错误,请检查更新的。我更新了错误日志 – 2015-04-01 09:28:34

+0

@PremTomar更新了代码。对于之前的崩溃感到抱歉。那是我的不好。 – 2015-04-01 09:29:56

+0

非常感谢@ iosDev82。有用。 – 2015-04-01 09:32:17

1

总是记住,当有{}大括号,这意味着它是词典和当[]此,意味着阵列

NSURL *url=[NSURL URLWithString:@"Your JSON URL"]; 

NSData *data = [[NSData alloc] initWithContentsOfURL:url]; 

NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

NSArray *array = json[@"array"]; 

for(NSMutableDictionary *dic in array) 
{ 
    NSLog(@"%@",dic[@"Category"][@"charity_id"]); // prints 2 
    NSLog(@"%@",dic[@"Category"][@"charity_name"]); // GiveDirectly 
    NSLog(@"%@",dic[@"Category"][@"charity_amt"]); // 0.20 
} 
+0

在JSON中。当翻译成NSArrays和NSDictionarys和NSLogged时,{}仍然意味着字典,但是'()'意味着数组。 – 2015-04-01 12:25:58

1

这是我的解析器JSON数据,它的演示

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    NSString *urlString   = @"https://api.foursquare.com/v2/venues/search?categoryId=4bf58dd8d48988d1e0931735&client_id=TZM5LRSRF1QKX1M2PK13SLZXRXITT2GNMB1NN34ZE3PVTJKT&client_secret=250PUUO4N5P0ARWUJTN2KHSW5L31ZGFDITAUNFWVB5Q4WJWY&ll=37.33%2C-122.03&v=20140118"; 
    NSURL *url    = [NSURL URLWithString:urlString]; 
    NSURLRequest *request  = [NSURLRequest requestWithURL:url]; 
// NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    NSOperationQueue *queue  = [[NSOperationQueue alloc] init]; 
    [NSURLConnection sendAsynchronousRequest:request 
             queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
              NSString *string = [[NSString alloc] initWithData:data 
                        encoding:NSUTF8StringEncoding]; 
              [self parser:data]; 
             }]; 
} 


- (void)parser:(NSData *)data 
{ 
    NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data 
                    options:0 
                     error:nil]; 
    [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
     [obj enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
     }]; 
    }]; 
}