如何在 iOS 中解析复杂的 JSON 数据

Posted

技术标签:

【中文标题】如何在 iOS 中解析复杂的 JSON 数据【英文标题】:how to Parse complicated JSON data in iOS 【发布时间】:2015-04-01 09:10:23 【问题描述】:

我正在使用 php 获取 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;

【问题讨论】:

复杂?你没见过复杂的!! 【参考方案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"]);
        
    

【讨论】:

它给出的错误请检查更新。我已经更新了错误日志 @PremTomar 更新了代码。对之前的崩溃感到抱歉。那是我的错。 太棒了。请从您的问题中删除错误崩溃,因为它不再需要并且将帮助未来的人。 :D【参考方案2】:

永远记住,当有 大括号时,表示它是字典,当有 [ ] this 时,表示数组

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

【讨论】:

在 JSON 中。当翻译成 NSArrays 和 NSDictionarys 和 NSLogged 时, 仍然表示字典,但 ( ) 表示数组。【参考方案3】:

这是我的解析器 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) 
        ];
    ];

【讨论】:

以上是关于如何在 iOS 中解析复杂的 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振中解析复杂的json

如何在颤振中解析这个复杂的json

iOS开发之JSON格式数据的生成与解析

解析复杂JSON数据

如何在 Ios 中解析数组数据中的嵌套 Json 对象

如何在ios7中解析这个json数据