开发者社区> 问答> 正文

ios 解析复杂的json数据

我采用两种办法解析数据都不成功,求大侠解救!

我的json数据的组成是这样的:服务器是把一个Arraylist

[{"CAjk":"","CBh":"EFE3268D1AE4B9B59B0D19B0C78A1EAE","CCfcs":"北京","pwlist":[{"CBh":"EFE3268D1AE4B9B59B0D19B0C78A1EAE","qfsj":"2013-5-23"}{"CBh":"EFE3268D1AE4B9B59B0D39B0C78A1EAE","qfsj":"2013-5-23"}]}{{"CAjk":"","CBh":"EFE3268D1AE4B9B59B0D19B0C88A1EAE","CCfcs":"北京","pwlist":[{"CBh":"EFE3268D1AE4B9B59B0D19B0C78A2EAE","qfsj":"2013-5-23"}{"CBh":"EFE3268D1AE4B9B59B0D39B0C78A3EAE","qfsj":"2013-5-23"}]}]
我试过的第一种方法是 采用原生的自带的json解析

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

另一种方法是用第三方的包JSONKit解析

NSDictionary *dic =[data objectFromJSONData];

这两种方法都无法把数据转换为数据字典,我在找问题的时候发现,如果我把ArrayList的每一个object A当中又包含了一个ArrayList

最后找到原因 并不是因为解析数据的问题,原因是:

首先:我用下面的代码连接服务器

  • (void)viewDidLoad

{
NSURL *finalURL = [NSURL URLWithString:urlWithParams];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];

NSURLConnection *urlConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];

[urlConnection start];

  • (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data

{

由于我刚刚学IOS所以对这里的机制不了解,我以为这里返回的数据是完整的,然后就开始扒拉扒拉解析数据,

在这里data是多次返回的,数据并不完整,数据量多的时候,我很难发现。所以我们需要完整的数据。

于是需要下面的这一行代码。

[_receiveData appendData:data];//记得声明@property NSMutableData *receiveData; 


}
真正的解析要在下面的这里开始

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection{

    [self jiexiJson]; 
    

}

-(void)jiexiJson{

NSError *error=nil; 

NSDictionary *resultDir=[NSJSONSerialization JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:&error]; 

NSArray *resultArray=(NSArray *)resultDir; 

NSUInteger resultcount=[resultDir count]; 

for (int i=0; i<resultcount; i++) { 

    NSDictionary *data1=[resultArray objectAtIndex:i]; 

    FlightInto *flight=[FlightInto alloc]; 

    [flight setCBh:[data1 objectForKey:@"CBh"]]; 

    [flight setCAjk:[data1 objectForKey:@"CAjk"]]; 

    [flight setCCfcs:[data1 objectForKey:@"CCfcs"]]; 

    [flight setCDdcs:[data1 objectForKey:@"CDdcs"]]; 

    [flight setCDjk:[data1 objectForKey:@"CDjk"]]; 

    [flight setCFjxh:[data1 objectForKey:@"CFjxh"]]; 

     。。。。。。。。。。。 

} 

}

展开
收起
杨冬芳 2016-06-30 18:46:05 2618 0
1 条回答
写回答
取消 提交回答
  • . ios是操作系统,怎么解析json...至少得说什么开发语言吧... 你这段json有问题 键值需要加引号,数组要用中括号,属性用逗号隔开,给你写一个吧: [{ "isconf": 0, "link": "http:", "name": "A", "type": "\U8f6f"},{ "isconf": 0, "link": "http:", "name": "A", "type": "\U8ba1"},{ "isconf": 0, "link": "http:", "name": "I", "type": "\U8ba1"},{ "isconf": 1, "link": "http:", "name": "A", "type": "\U8f6f"},{ "isconf": 1, "link": "http:", "name": "I", "type": "\U4eba"},{ "isconf": 1, "link": "http://", "name": "A", "type": "\U8f6f"}]

    2019-09-19 19:06:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像