iOS解决json串中的NSNull类型

 

后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串。下面是转化方法:

1 自定义的几个方法:放在NSDictionary类别中

#pragma mark - 私有方法

//将NSDictionary中的Null类型的项目转化成@""

+(NSDictionary *)nullDic:(NSDictionary *)myDic

{

NSArray *keyArr = [myDic allKeys];

NSMutableDictionary *resDic = [[NSMutableDictionary alloc]init];

for (int i = 0; i < keyArr.count; i ++)

{

id obj = [myDic objectForKey:keyArr[i]];

obj = [self changeType:obj];

[resDic setObject:obj forKey:keyArr[i]];

}

return resDic;

}

//将NSDictionary中的Null类型的项目转化成@""

+(NSArray *)nullArr:(NSArray *)myArr

{

NSMutableArray *resArr = [[NSMutableArray alloc] init];

for (int i = 0; i < myArr.count; i ++)

{

id obj = myArr[i];

obj = [self changeType:obj];

[resArr addObject:obj];

}

return resArr;

}

//将NSString类型的原路返回

+(NSString *)stringToString:(NSString *)string

{

return string;

}

//将Null类型的项目转化成@""

+(NSString *)nullToString

{

return @"";

}

#pragma mark - 公有方法

//类型识别:将所有的NSNull类型转化成@""

+(id)changeType:(id)myObj

{

if ([myObj isKindOfClass:[NSDictionary class]])

{

return [self nullDic:myObj];

}

else if([myObj isKindOfClass:[NSArray class]])

{

return [self nullArr:myObj];

}

else if([myObj isKindOfClass:[NSString class]])

{

return [self stringToString:myObj];

}

else if([myObj isKindOfClass:[NSNull class]])

{

return [self nullToString];

}

else

{

return myObj;

}

}

2 使用方法(绿色的是实际用到的代码)

(1)原始的json串:后端返回的json串里面包含类型NSString,NSArray,NSDictionary,NSNull类型。

{"status":1,"service_name":null,"service_id":null,"img_url":"http:\/\/api.jgfw.me\/assets\/uploads\/files\/","price":null,"num":3,"service_info":{"service_type":null,"service_time":null,"service_detail":null,"customer_name":null,"customer_phone":null,"customer_address":"","new_jishi":"","old_jishi":null,"lat":null,"lon":null},"order_info":{"order_no":"E15031267469289848688","pay_time":null,"order_time":null,"price":0,"order_state":null}}


(2)用SBJson库:json串转换成字典

NSDictionary *jsonDic = [retString JSONValue];


(3)用自定义方法转换后的结果:将字典中所有的NSNull类型转换成@""

NSDictionary *dict = [NSDictionary
changeType:jsonDic];

{

    "img_url" =
"http://api.jgfw.me/assets/uploads/files/";

    num = 3;

    "order_info" =
    {

     
  "order_no" = E15031267469289848688;

     
  "order_state" = "";

     
  "order_time" = "";

     
  "pay_time" = "";

     
  price = 0;

    };

    price = "";

    "service_id" = "";

    "service_info" =
    {

     
  "customer_address" = "";

     
  "customer_name" = "";

     
  "customer_phone" = "";

     
  lat = "";

     
  lon = "";

     
  "new_jishi" = "";

     
  "old_jishi" = "";

     
  "service_detail" = "";

     
  "service_time" = "";

     
  "service_type" = "";

    };

    "service_name" =
"";

    status = 1;

}

iOS解决json串中的NSNull类型的更多相关文章

  1. iOS开发解决json串中的NSNull类型

    后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放 ...

  2. JMeter获取复杂的JSON串中的参数的值

    大家好,这篇博文中主要是介绍怎么用JMeter的BeanShell去获取复杂的JSON串中的某个参数的值,这将 便于我们用JMeter做出更完美的自动化测试: 首先有这样一个json串: { &quo ...

  3. 解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException

    解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException这个问题出现的原因:一般在使用annotation的方式注入spring的bean 出现的,具体 ...

  4. 处理Json数据中的日期类型.如/Date(1415169703000)/格式

    在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: v ...

  5. ios 传递JSON串过去 前面多了个等号

    先说下我的问题 后台让我这边把请求的参数弄成一个实体转化成 json 串放body里传给他,当然header也有设置,提前设置好了, 但是后来了解 所谓的把实体转成json串的本质就是先把实体用run ...

  6. **iOS发JSON请求中字符串加转义,返回的JSON去转义

    iOS中使用NSSerialization把对象转为JSON字符串后,多出来反斜杠的问题 http://segmentfault.com/q/1010000000576646 NSDictionary ...

  7. MYSQL - JSON串中查找key对应的值

    1.建表 -- 建表 drop table if exists ta_product2; CREATE TABLE ta_product2( id int primary key auto_incre ...

  8. dotnet 手动解决 json 解析中不合法字符串

    如果使用 Newtonsoft Json 解析字符串,字符串里面有不清真的格式,那么默认的解析将会炸掉.如果想要自己解决字符串中的不清真格式,可以使用传入 JsonSerializerSettings ...

  9. js 获取json串中的值

    用js中著名的eval函数var strJSON = "{name:'json name'}";//得到的JSONvar obj = eval( "(" + s ...

随机推荐

  1. 转linux文件的读写

    转自 http://www.open-open.com/lib/view/open1474356438277.html 缓存 缓存是用来减少高速设备访问低速设备所需平均时间的组件,文件读写涉及到计算机 ...

  2. 1.15 Python基础知识 - 函数

    函数是可重用的程序代码段. 一.函数的声明和调用 声明格式: def 函数名([形参列表]): 函数体 调用格式: 函数名([实参列表]) 函数名:是一种标识符,命名规则为全小写字母,可以使用下划线增 ...

  3. 【AtCoder Regular Contest 082】Derangement

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 贪心. 连续一块的p[i]==i的话,对答案的贡献就应该为(这个连续块的长度+1)/2; 长度为1的也正确. (也即两两相邻的互换位置.) [错 ...

  4. How to Rotate Tomcat catalina.out

    If catalina.out becomes 2GB in size, tomcat crashes and fails to start without any error message. To ...

  5. JAVA开发类似冒险岛的游戏Part1

    JAVA开发类似冒险岛的游戏Part1 一.总结 二.JAVA开发类似冒险岛的游戏Part1 初学嘛) ,不过总的来说这个程序还是很有意思的.这里我重新再整理了一下,希望能帮助到其他想要开发类似程序的 ...

  6. JS学习笔记 - fgm练习 - 输入数字求和 正则replace onkeyup事件

    <style> body{font-size: 12px;} .outer{ width: 500px; margin: 0 auto; } span{ color: #999; } in ...

  7. (转)xshell无法在vim中复制黏贴

    ssh xshell 连接在vim中无法用 ctrl+insert 复制黏贴 修改.vimrc set mouse=c vi的三种模式:命令模式,插入模式,可视模式.鼠标可以启动于各种模式中: The ...

  8. oracle exp 备份脚本

    #!/bin/bash#Oracle 环境变量 NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ORACLE_SID=zgw ORACLE_BASE=/opt/oracle OR ...

  9. 最新GitHub新手使用教程(Windows Git从安装到使用)——详细图解

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.叙述 1.Git简介 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本 ...

  10. c++智能指针使用笔记

    1. c++智能指针中,c++的memory文件中,有auto_ptr等各种关于智能指针的东西,shared_ptr,weak_ptr在C++11中已经成为标准. 也看了ogs的智能指针,每次引用起来 ...