Json数据传输中null的问题以及宏的返回值

问题现象

但是几个项目下来一直遇到一个坑爹的问题,程序在获取某些数据之后莫名崩溃。其实很早就发现了原因:由于服务器的数据库中有些字段为空,然后以Json形式返回给客户端时就会出现这样的数据:

 代码如下 复制代码

"somevalue":null

通过JsonKit 这个第三方库解析出来的数据就成了

 代码如下 复制代码
somevalue = "<null>";

这个数据类型不是nil 也不是 String。 解析成对象之后,如果直接向这个对象发送消息(eg:length,count 等等)就会直接崩溃。提示错误为:

 代码如下 复制代码
-[NSNull length]: unrecognized selector sent to instance 0x388a4a70

解决方法,其实一直没有找到完美的解决办法,坑了我很久。

1、最开始的解决方法就是为了应付当前遇到的崩溃,看看哪个字段可能为空,那么就对该字段使用前进行判断,通过崩溃时的错误提示可以看出,这样的字段解析成的对象是 NSNull 类型的,所以可以直接判断是不是此类型:

 代码如下 复制代码
if (![isKindOfClass:[NSNull class]]){xxxxxxx;}

因为字段实在太多,就找一个补一个。

2、后来想彻底解决这问题,就打算从数据源下手,其实应该可以用正则表达式匹配这个null ,然后进行替换,奈何正则是我的硬伤啊。于是就相出了一个山寨方法:字符串匹配。在获取到服务器返回的Json时,返回结果时string对象,于是就先替换 null 为 为空字符””,然后再解析。

 代码如下 复制代码
json = [jsonStr  stringByReplacingOccurrencesOfString:@":null" withString:@":"""];

这个方法本

时间: 2024-10-08 20:10:42

Json数据传输中null的问题以及宏的返回值的相关文章

java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗

问题描述 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 解决方案 加入你有一个对象 Object 里面有个方法:public void method1(); 那你调用这个方法的时候就是 object.method1(); 那么这里就表示 没有返回值. 所以我里面的void就是 :没有返回值,这个方法不能做他用! 对比 有一个object 里面有一个方法: publ

二次开发过程中,如何获取CRM4检索类型的返回值。使用JAVASCRIPT等技术

问题描述 二次开发过程中,如何获取CRM4检索类型的返回值.使用JAVASCRIPT等技术.也就是点击检索类型旁边的放大镜后,需要对弹出的子页面的返回的值进行处理.谢谢各位大侠啦. 解决方案

shell脚本中执行python脚本并接收其返回值的例子_linux shell

1.在shell脚本执行python脚本时,需要通过python脚本的返回值来判断后面程序要执行的命令 例:有两个py程序  hello.py 复制代码 代码如下: def main():     print "Hello" if __name__=='__main__':     main() world.py def main():     print "Hello" if __name__=='__main__':     main() shell 脚本 te

Linux中如何直接使用cd进入which返回值所在的目录

一.需要的Linux命令 1.Linux下将一个命令的输出作为另一个命令的参数:``(键盘左上的点,注意和引号不同)或者$() 2.提取文件目录中文件名之外目录的命令:dirname 二.实现直接使用cd进入到which得到的Android的adb文件目录的方法 方法1:cd `dirname $(which adb)` 方法2:cd $(dirname $(which adb)) 三.返回原目录 方法1:cd - 方法2:cd $OLDPWD 更多精彩内容:http://www.biancen

c#创建excel宏并返回值

问题描述 用c#创建一个Excel控制表格格式的宏,对Excel修改格式后,返回修改结果,下次再创建则创建的是修改后的宏 解决方案

js中一个函数获取另一个函数返回值问题探讨_javascript技巧

复制代码 代码如下: //此种为异步,还不等ajax赋完值,函数就return了. function getCaseInfoForMap(){ var formInfo=$("#firstForm").serialize(); var dd; $.ajax({ type:"post", url:"<%=path %>/webmodule/constructionDecision/WjInfo/getCaseInfoForMap.do?timeT

Sql与oracle中null值

  1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据类型的字段为空

线程中的回调函数如何获得返回值,请高手开悟,在线等......

问题描述 普通回调方法:classA{classBxx=newclassB();stringss=k.ca(tm);stringtm(stringxm){returnxm+"一杯醉倒";}}classB{publicdelegatestringtc();publicstringca(tcmm){MessageBox.Show("到这里了!");returnmm("我");}}执行stringss=k.ca(tm);语句后,得到回调函数tm的返回值

代码-LUA 读取C#中返回值为数组的函数

问题描述 LUA 读取C#中返回值为数组的函数 请教大师们,一个问题:我在C#中写了一个返回值为数组的函数float[] data_handle1() ,想在Lua中调用此函数?在lua 中如何操作读取这个函数的返回值呢?C# 的函数具体代码如下: public float[] data_handle1() //串口20个字节回复字节解析 { ------------------------ float[] i = new float[8]; int p = 0; for (int loop =