解决jsonObject.put("key",null)时,值为null的属性key会消失

问题描述:

返回json内容为:

{
  "success": true,
  "msg": "查询成功!",
  "object": null
}

需要单独取出object进行加密判断,因为object取出来会变成一个“null”的字符串,所以在踩坑过程中发现,jsonObject.put("key",null)的时候,如果value值为null,那么object这个属性值就会消失经过一顿百度,找到了如下办法:

        String content = "{\n" +
                "  \"success\": true,\n" +
                "  \"msg\": \"查询成功!\",\n" +
                "  \"object\": null\n" +
                "}";
        JSONObject jsonObject = JSONObject.parseObject(content);
        JSONObject objectOld = (JSONObject)jsonObject.get("object");
        jsonObject.put("object",objectOld);
        System.out.println("未加SerializerFeature.WriteMapNullValue——"+jsonObject);

        String s = JSONObject.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue);
        System.out.println("加上SerializerFeature.WriteMapNullValue——"+s);

 

 

 显而易见加上JSONObject.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue)这个方法问题解决,但是我需要对这个null再进行加密的话,解密出来就会变成一个"null"字符串,最后采用了三元判断的方法,也能写入null

        jsonObject.put("object", object==null?null:加密内容);

这样就不会影响到前端解密以后拿到的是null而不是"null"

同时附上百度到的Fastjson的SerializerFeature序列化属性方法

QuoteFieldNames———-输出key时是否使用双引号,默认为true

WriteMapNullValue——–是否输出值为null的字段,默认为false

WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null

 

posted @ 2022-02-22 15:54  迷糊桃  阅读(5542)  评论(0编辑  收藏  举报