json转对象的时候字段为空值的时候会被过滤
今天突然想起來一個(gè)json字符串轉(zhuǎn)json對(duì)象的時(shí)候容易忽略的一個(gè)小細(xì)節(jié)。只為自己記錄
問題:json字符串里面有值為null的轉(zhuǎn)json對(duì)象的時(shí)候字段消失
假設(shè):調(diào)接口的時(shí)候,返回的json字符串里面有兩條記錄,每條記錄里面有三個(gè)字段,
 a,b,c
接口返回的json字符串樣例:
 {
 “msg”:“請(qǐng)求成功!”,
 “code”:“200”,
 “data”:[
 {
 “a”:null,
 “b”:“20210322”,
 “c”:null
 },
 {
 “a”:null,
 “b”:“20210323”,
 “c”:null
 }
 ]
 }
但是c字段的值是null
這時(shí)候一般都會(huì)把json字符串先轉(zhuǎn)成JSONObject對(duì)象,然后從對(duì)象里面取值,
 直接轉(zhuǎn)的時(shí)候是可以轉(zhuǎn)的,但是轉(zhuǎn)完之后你會(huì)發(fā)現(xiàn)你要取a和c字段的時(shí)候會(huì)報(bào)錯(cuò),找不到字段,是因?yàn)閍和c值為空自動(dòng)屏蔽掉了,
解決辦法一:
 String ssssss=JSONObject.toJSONString(jsonString, SerializerFeature.WriteMapNullValue);
JSONObject jsonobject = JSONObject.parseObject(ssssss);
1,從json對(duì)象里面取code
 String code = jsonobject.getString(“code”)
2,data里面是多條記錄的時(shí)候,要轉(zhuǎn)json數(shù)組
 JSONArray jsonArray = JSONArray.fromObject(jsonobject.get(“data”));
 然后遍歷json數(shù)組,從數(shù)組里面取對(duì)應(yīng)記錄的值就可以了
附:
 QuoteFieldNames———-輸出key時(shí)是否使用雙引號(hào),默認(rèn)為true
 WriteMapNullValue——–是否輸出值為null的字段,默認(rèn)為false
 WriteNullNumberAsZero—-數(shù)值字段如果為null,輸出為0,而非null
 WriteNullListAsEmpty—–List字段如果為null,輸出為[],而非null
 WriteNullStringAsEmpty—字符類型字段如果為null,輸出為”“,而非null
 WriteNullBooleanAsFalse–Boolean字段如果為null,輸出為false,而非null
解決辦法二:
 如果接口返回的數(shù)據(jù)在你項(xiàng)目里面有對(duì)應(yīng)的實(shí)體類,這就簡(jiǎn)單了,
 jsonString:是接收到接口返回的結(jié)果
 List Danganlist = JSONObject.parseArray(jsonString, Dangan.class);
 對(duì)Danganlist 判空,
 遍歷Danganlist
 再取值就和實(shí)體類取值一樣了
 String aaa = Dangan.getAaa();
總結(jié)
以上是生活随笔為你收集整理的json转对象的时候字段为空值的时候会被过滤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: centos 生成 ssh-key gi
 - 下一篇: python天蝎座-day1笔记