金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > iOS中json解析出现的null,2017中使用json传参时解析

iOS中json解析出现的null,2017中使用json传参时解析

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-10-11 04:12

开采新的系统,DB部分行使了SQL Server从二零一六版开头自带的Json分析方法。

iOS中json深入分析出现的null,nil,NSNumber的问题,jsonnsnumber

在iOS开荒进度中平日需求与服务器进行数据通信,Json正是一种常用的即刻简明的数据格式。

用了快3个月,在个人项目,以至店堂部分项目上运用了,权且还没蒙受大的标题,和总体性问题。

标题现象

唯独多少个品类下来一向遭逢四个坑爹的题材,程序在赢得有些数据之后莫名崩溃。其实很已经开采了原因:由于服务器的数据库中稍加字段为空,然后以Json情势再次回到给客商端时就能冒出这样的数码:

?

1 "somevalue":null

透过JsonKit 那么些第三方库深入分析出来的数据就成了

?

1 somevalue = "<null>";

金沙棋牌app手机下载,以此数据类型不是nil 亦不是 String。 深入分析成对象之后,假若直接向那个指标发送音信(eg:length,count 等等)就能够一向崩溃。提醒错误为:

?

1  -[NSNull length]: unrecognized selector sent to instance 0x388a4a70

明天在分析Json的多元参数碰着了点小难点,在这里记录一下:

减轻形式

实则向来从未找到完美的化解办法,坑了本人比较久。

1、最开始的消除格局就是为着应景当前遇到的垮台,看看哪位字段只怕为空,那么就对该字段使用前开展判定,通过崩溃时的不当提醒能够看见,这样的字段深入分析成的靶子是 NSNull 类型的,所以能够间接推断是还是不是此类型:

?

1  if (![isKindOfClass:[NSNull class]]){xxxxxxx;}

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

2、后来想透彻解决那难点,就准备从数据源动手,其实应该能够用正则表明式相称那一个null ,然后开展交换,奈何正则是小编的硬伤啊。于是就相出了二个村寨方法:字符串相配。在获得到服务器重回的Json时,重临结果时string对象,于是就先替换 null 为 为空字符””,然后再剖判。

?

1 json = [jsonStr  stringByReplacingOccurrencesOfString:@":null" withString:@":"""];

本条方法自然很见效,然而作者这里的服务器重临极不简洁,各类废物数据(不嗤笑这了)。。。反正那样会促成json无法深入分析了。

3、最后没办法,只好在条分缕析的时候入手,把是NSNull 类型的值替换到nil。 日常就写个tool方法,然后深入分析时调用。可是嫌太勤奋,就想弄写个宏,通过查找欢悦的意识宏也是可以有重临值的,结果如下:

?

1 2 3 4 5 6 7 8 #define VerifyValue(value) ({id tmp; if ([value isKindOfClass:[NSNull class]]) tmp = nil; else tmp = value; tmp; })

宏里的末尾一句语句正是重回值。然后在条分缕析数据时调用宏:

?

1 contact.contactPhone = VerifyValue(contactDic[@"send_ContactPhone"]);

4、倘令你利用AFNetwork 那一个库做网络哀求的话,能够用来下代码,自动帮你去掉那个讨厌的空值

?

1 self.removesKeysWithNullValues = YES;

5、终极方案
到头来找到了一劳永逸的方案,牛逼的老外写了贰个Category,叫做NullSafe ,在运营时操作,把这么些讨厌的空值置为nil,而nil是高枕而卧的,能够向nil对象发送任何message而不会奔溃。这么些category使用起来特别便利,只要加入到了工程中就足以了,你任何的什么都毫无做,对,正是这么轻巧。详细的请去Github上查看;

 

在iOS开采进度中时时索要与服务器举行数据通信,Json正是一种常用的飞快简明的多寡格...

传参内容如下:

1 declare @json varchar(max)=N'{"Customer":36,"Positions":[{"ID":0,"Quantity":180000,"Files":[180,177,175,172,170,169,167,164,161,162,159,158,153,152]}]}';

想深入分析出Positions里面包车型客车Files,可是一贯报错,也许NULL。

查询文书档案,开采这种解析必要制订的字段类型,并准成json才行。

解析的SQL Script如下:

1 select    ID, Quantity, FileID=f.value
2 from    openjson (@json, '$.Positions')
3 with (
4     ID int, 
5     Quantity int,
6     Files nvarchar(max) '$.Files' as json
7 ) x
8 cross    apply openjson(x.Files, '$') f

*注:此中第6行的写法是固定的:字段类型及末端的。

 

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:iOS中json解析出现的null,2017中使用json传参时解析

关键词:

上一篇:没有了

下一篇:没有了