json字符串解析成数组 or 字典

2018-01-26  本文已影响50人  余小鱼er_

公司的服务端返回的数据是json字符串,需要自己转化成相应的数组或字典类型:

{
    d =     {
        Data = "[{\"User_Icon\":\"271_48.jpg\",\"Doctor_Id\":51,\"User_Name\":\"sjnk\",\"User_FullName\":\"神经内科\",\"Doctor_Title\":\"主任医师\",\"Doctor_Specialty\":\"联系电话:0371-66916410\\n
特色诊疗:1、头晕的诊断与治疗。科室拥有头晕(前庭功能)检查先进设备,在头晕的诊疗方面积累了丰富的诊疗经验,处于省内先进水平;
2、急性脑血管病(脑梗死、脑出血、脑缺血发作、蛛网膜下腔出血、脑静脉血栓形成、脑血管狭窄等)的诊断、抢救与治疗。尤其是我们开展早期溶栓治疗脑梗死,卓有成效,抢救成功许多危重病人的生命。
3、脑白质脱髓鞘及记忆障碍、痴呆、脑萎缩的诊断与治疗。
4、神经内科疑难病诊治。神经内科一病区业务技术力量强,在知名专家何远宏教授带领下,并特邀请省内外著名的神经内科专家王建平教授、李建章教授主持每周三、四疑难病会诊讨论,解决很多疑难病的诊治问题。
5、面瘫的诊治。6、睡眠障碍与抑郁、焦虑的诊断与治疗。
\",\"Doctor_Intro\":\"www.ztzy.com/Office-2.html\",\"Hospital_FullName\":\"郑州大学第五附属医院\",\"Department_FullName\":\"神经内科\",\"Treatment_Count\":674,\"Treatment_Satis\":\"5\",\"InRoom\":1},{\"User_Icon\":\"273_34.jpg\",\"Doctor_Id\":53,\"User_Name\":\"xxgnk\",\"User_FullName\":\"心血管内科\",\"Doctor_Title\":\"主任医师\",\"Doctor_Specialty\":\"联系电话:0371-66916410\\n
特色诊疗:1、冠心病及心肌梗死的介入治疗;心律失常、心房纤颤射频消融治疗;先天性心脏病的介入治疗。2、冠心病、心力衰竭及高血压病的诊断治疗。3、心脏起搏器植入术及其术后管理;心力衰竭心脏再同步化治疗。4、冠状动脉支架术后病人管理及心血管疾病的康复治疗。\",\"Doctor_Intro\":\"www.ztzy.com/Office-12.html\",\"Hospital_FullName\":\"郑州大学第五附属医院\",\"Department_FullName\":\"心血管内科\",\"Treatment_Count\":289,\"Treatment_Satis\":\"5\",\"InRoom\":1}]";
        Msg = "成功";
        Status = 1;
        "__type" = "Domain.CusResult";
    };
}

我这里把它封装到自己的工具类里了,用类方法调用的:
1.解析成数组类型

+ (NSArray *)arrayWithJsonString:(NSString *)jsonString {
    if (jsonString == nil) {
        return nil;
    }
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSArray *arr = [NSJSONSerialization JSONObjectWithData:jsonData
                                                   options:NSJSONReadingMutableContainers
                                                     error:&err];
    if(err) {
        NSLog(@"json解析失败:%@",err);
        return nil;
    }
    return arr;
    
}

2.解析成字典类型,和数组类型方法一样,只不过是把NSArry换成NSDictionary。

+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
    if (jsonString == nil) {
        return nil;
    }
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData
                                                   options:NSJSONReadingMutableContainers
                                                     error:&err];
    if(err) {
        NSLog(@"json解析失败:%@",err);
        return nil;
    }
    return dict;
    
}

因为服务端返回过来的数据里Data = "[{\"User_Icon 多了首尾" 所以用的时候,要先把它从字符串中截取掉,再用解析方法来解析成相应的数组或字典。

NSString *str = dic[@"d"][@"Data"];
        str = [str substringFromIndex:0];//截取掉首部的"
        str = [str substringToIndex:str.length];//截取掉末尾的"
        //json字符串转化成数组类型
        NSArray *newArr = [Validate arrayWithJsonString:str];
        for (NSDictionary *newdic in newArr) {//遍历数组获取数据
            EMNetworkDoctorListModel *doctModel = [[EMNetworkDoctorListModel alloc]initWithDict:newdic];
            [self.doctorArray addObject:doctModel];
        }
上一篇下一篇

猜你喜欢

热点阅读