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. PHP: php_ldap.dll不能加载解决方案

    PHP: php_ldap.dll不能加载解决方案 php.ini中开启 ldap的扩展后,重启服务:phpinfo();中没有ldap apache_error.log 提示:PHP Warning ...

  2. upf用到的工具

    emulator          : PXP zebu simulator :

  3. Servlet的异常处理机制

    一 声明式异常处理   在web.xml中对声明对各种异常的处理方法. 通过 <error-page>元素来声明. 此元素的结构如下:                    +------ ...

  4. 洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares

    P1206 [USACO1.2]回文平方数 Palindromic Squares 题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2< ...

  5. JS中的发布订阅模式

    一. 你是如何理解发布订阅模式的 JS中的设计模式: 单例模式:处理业务逻辑 构造原型模式:封装类库,组件,框架,插件等 类库:jQuery 只是提供了一些常用的方法,可以应用到任何的项目中,不具备业 ...

  6. Day2:字典

    一.定义 字典是一种“key-value”成对出现的数据类型,中间用冒号把key与value隔,不同的数据用逗号隔开,全部数据用大括号括起来 info = { 'stu1101': "Ten ...

  7. DB2学习总结(1)——DB2数据库基础入门

    DB2的特性 完全Web使能的:可以利用HTTP来发送询问给服务器. 高度可缩放和可靠:高负荷时可利用多处理器和大内存,可以跨服务器地分布数据库和数据负荷:能够以最小的数据丢失快速地恢复,提供多种备份 ...

  8. ExtJs4学习(七)MVC中的Store

    Ext.data.Store是extjs中用来进行数据交换和数据交互的标准中间件,不管是Grid还是ComboBox,都是通过它 实现数据读取.类型转换.排序分页和搜索等操作的. Ext.define ...

  9. warning: expression result unuesd 可能原因是函数忘了加括号,

  10. iOS开发UI篇--一个侧滑菜单SlidingMenu

    一.简介 侧滑菜单已经成为app一个极常用的设计,不管是事务类,效率类还是生活类app.侧滑菜单因Path 2.0和Facebook为开发者熟知,国内目前也有很多流行app用到了侧滑菜单,比如QQ.网 ...