解决json字符串中包含null传递报错404的问题

这两天在和移动端对接接口时,发生了404错误。使用的是net.sf.json.jsonarray

检查发现是返回的jsonarray字符串中有一个对象的属性值为空。当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取。

上网查了好几种解释,但是和我的情况多少有些区别。但是也算是类似问题的一种解决方案吧,所以都记录下来了。例子来自网路,侵删!

1,当使用com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter转换返回数据为json时,会省略掉为空为null的属性值。

如果使用这个json包,那么不会像我这边报错,但是对应的属性就没有了,前端不会查找到。能解决报错,但是不能从根本上解决问题。

2,spingmvc.xml配置json转换器时加上对空和null的处理,配置如下:


        
            
                JSON转换器
                
                    
                        application/json;charset=UTF-8
                        text/html;charset=UTF-8
                    
                
                
                    
                        QuoteFieldNames
                        WriteDateUseDateFormat
                        
                        WriteNullListAsEmpty
                        
                        WriteNullStringAsEmpty
                        
                        WriteNullBooleanAsFalse
                    
                
            
        

下面是json的几个序列化属性:

QuoteFieldNames———-输出key时是否使用双引号,默认为true 
WriteMapNullValue——–是否输出值为null的字段,默认为false 
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null 
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null 
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null

Map < String , Object > jsonMap = new HashMap< String , Object>();  
jsonMap.put("a",1);  
jsonMap.put("b","");  
jsonMap.put("c",null);  
jsonMap.put("d","wuzhuti.cn");  
  
String str = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue);  
System.out.println(str);  
//输出结果:{"a":1,"b":"","c":null,"d":"wuzhuti.cn"}  

最后没有采用上面的方法,但是也是不错的解决思路。

因为已经知道是有属性值为null的问题,在生成json的时候,把属性值装换为空字符串或者0即可。

 

 

学无止境

你可能感兴趣的:(java,JSON)