开发者社区> 问答> 正文

转json对象如何保留空值

转json对象如何保留空值?

JSONWriter中有配置项,在JSONReader中没找到

public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(0, "a"); map.put(1, "b"); map.put(2, null); map.put(3, "c"); String header = JSON.toJSONString(map, JSONWriter.Feature.WriteMapNullValue); System.out.println(header); JSONObject jsonObject = JSON.parseObject(header); System.out.println(jsonObject); }

原提问者GitHub用户yuankc

展开
收起
飘飘斯嘉丽 2023-04-21 12:03:24 382 0
3 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    JSONWriter类在fastjson库中提供,可以通过该类的特性来保留空值。而在JSONReader中,默认情况下保留空值已经是默认行为,没有特殊的配置项。

    下面是演示代码,可以使用JSONWriter中的WriteMapNullValue特性来保留map中的null值:

    import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.JSONWriter;

    import java.util.HashMap; import java.util.Map;

    public class Demo {

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(0, "a");
        map.put(1, "b");
        map.put(2, null);
        map.put(3, "c");
    
        String jsonStr = JSON.toJSONString(map, JSONWriter.WriteMapNullValue);
        System.out.println(jsonStr);
    
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        System.out.println(jsonObject.toJSONString());
    }
    

    } 在上述代码中,将WriteMapNullValue特性传递给了JSON.toJSONString()方法,就可以保留空值。输出结果如下:

    {"0":"a","1":"b","2":null,"3":"c"} {"0":"a","1":"b","2":null,"3":"c"} 可以看到,两个输出结果中都保留了map中的空值。如果不传递WriteMapNullValue特性,则会省略掉null值,输出结果如下:

    {"0":"a","1":"b","3":"c"} {"0":"a","1":"b","3":"c"} 可以看到,省略掉了map中的null值。最后的JSONObject.toJSONString()其实可以省略,直接输出JSONObject对象也是一样的。

    2023-04-21 21:28:43
    赞同 展开评论 打赏
  • 你打开 jsonObject 对象看看,里面的属性就是 null,JSONReader不需要设置保留null,因为它就是null,为什么你最后一次打印没打印出来,因为默认不打印空值。。。。 JSON.toJSONString(jsonObject, JSONWriter.Feature.WriteNulls)

    回答4.png

    原回答者GitHub用户yangcanlin

    2023-04-21 14:50:30
    赞同 展开评论 打赏
  • 转JSONObject时对于value的值使用“new TypeReference<Map<String,Object>>(){}”可保留null值

    2023-04-21 12:57:35
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载