六、处理JSON解析value为null、key为null的方法

问题1:

问题:JSON字符串转换成JSONObject的时候 ,会有数据精度的问题,这种情况我们怎么解决呢?
处理方案:我们一般都会通过fastjson来解决这个问题。

    
      com.alibaba
      fastjson
      1.2.24
    
问题2:

问题:fastjson在解析字符串时如果某个字段的值为null,则实际解析不会展示为null的字段和值,这个时候我们怎么去设置断言?
处理方案:可以直接通过要取值的字段取值,结果会返回为null

演示代码:

      String body_bvt1 = "{\"reconDate\":\"2022-08-17\",\"a\":{\"page\":null},\"pageSize\":300}";
      JSONObject bs = JSON.parseObject(body_bvt1);
      System.out.println(bs.getJSONObject("a").getString("page"));

返回结果:
   null
问题3

当字段不存在时,通过json取值fastjson也会返回null,这样我们就没办法区分问题2中字段值为null而非字段不存在的情况,这个时候我们怎么去处理?

演示代码: - 字段存在的情况
        String body_bvt1 = "{\"reconDate\":\"2022-08-17\",\"a\":{\"page\":null},\"pageSize\":300}";
        JSONObject bs = JSON.parseObject(body_bvt1);
        System.out.println(bs.getJSONObject("a").containsKey("page"));
返回结果:
       true
演示代码: - 字段不存在的情况
        String body_bvt1 = "{\"reconDate\":\"2022-08-17\",\"a\":"o",\"pageSize\":300}";
        JSONObject bs = JSON.parseObject(body_bvt1);
        System.out.println(bs.getJSONObject("a").containsKey("page"));
返回结果:
       false

这样我们就可以通过containsKey关键字,完成对字段是否存在的判断。

补充的知识:

JsonObject本身集成了Map方法,如下为JsonObject源码的一段内容:
jsonobject源码.png
我们可以看到其实就是用了map的 containskey关键字。

你可能感兴趣的:(六、处理JSON解析value为null、key为null的方法)