如图,怎么解决 null 在转json 时丢失的问题

金杜 2016-11-11 03:17:11

如上图,怎么解决 null 在转json 时丢失的问题
...全文
3110 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaovhao 2017-11-05
  • 打赏
  • 举报
回复
Fastjson的SerializerFeature序列化属性 QuoteFieldNames———-输出key时是否使用双引号,默认为true WriteMapNullValue——–是否输出值为null的字段,默认为false WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
xiaovhao 2017-11-05
  • 打赏
  • 举报
回复
String str = JSONObject.toJSONString(json,SerializerFeature.WriteMapNullValue);可以试下这个
lfsxy 2017-11-05
  • 打赏
  • 举报
回复
引用 16 楼 liub112 的回复:
这个问题 是 fastjson 中JSONObject 父类JSON 重写的toString()方法导致的假象,实际上 parseObject 后的 json是带 value为null的键值对的。toString() 方法自动过滤掉了null 的键值对,在变量查看其里头 才会看不到为null 的键值对
自己可以 获取 keySet 遍历下就可以测试出来
lfsxy 2017-11-05
  • 打赏
  • 举报
回复
这个问题 是 fastjson 中JSONObject 父类JSON 重写的toString()方法导致的假象,实际上 parseObject 后的 json是带 value为null的键值对的。toString() 方法自动过滤掉了null 的键值对,在变量查看其里头 才会看不到为null 的键值对
金杜 2017-02-23
  • 打赏
  • 举报
回复
扯远了,我只是想通过大家的见多识广来帮助我确定 fastjson是否支持保留,因为每个第三方工具,都会有一些配置可共自定义,比如是否允许null值等,
引用 12 楼 brooklyng60 的回复:
别人这个组件就是这么设计的,null就不显示,要么就用这个组件,遵循别人的设计,改造自己的代码,要么就下载源码,重写这个组件
我就是想确定这位同学说的东西,但从这里看,这位同学貌似是在说气话
引用 13 楼 a276202031 的回复:
其实嘛 一个很简单的问题,不说底层的东西,就依我们的逻辑思维来讲,好吧我设置null值你就丢失,好吧那我把null换成字符串null放进去,然后到前段判断好了。所以说很多时候代码是死的人是活的
这个是下策,实在没办法可以这样解决
青年卫大师 2016-11-15
  • 打赏
  • 举报
回复
因为这种写法不是json的规范
浮云若水 2016-11-15
  • 打赏
  • 举报
回复
其实嘛 一个很简单的问题,不说底层的东西,就依我们的逻辑思维来讲,好吧我设置null值你就丢失,好吧那我把null换成字符串null放进去,然后到前段判断好了。所以说很多时候代码是死的人是活的
brooklyng60 2016-11-14
  • 打赏
  • 举报
回复
别人这个组件就是这么设计的,null就不显示,要么就用这个组件,遵循别人的设计,改造自己的代码,要么就下载源码,重写这个组件
  • 打赏
  • 举报
回复
那就if判断不为null再输出。
金杜 2016-11-11
  • 打赏
  • 举报
回复
引用 6 楼 Readiay 的回复:
	public static void main(String[] args) {
		String jsonStr = "{\"title\":null, \"name\":\"zs\"}";
		
		net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonStr);
		
		System.out.println(json);
	}
net.sf.json 是可以的, 但我们项目用 fastjson
金杜 2016-11-11
  • 打赏
  • 举报
回复
引用 8 楼 fangmingshijie 的回复:
只要bill有值,bill.title怎么会报错。


测试证明,确实不行,属性没有确实会报错
  • 打赏
  • 举报
回复
只要bill有值,bill.title怎么会报错。
金杜 2016-11-11
  • 打赏
  • 举报
回复
引用 5 楼 fangmingshijie 的回复:
说实话完全没看到你这有什么意义?


上面图片只是演示,请忽略toJSONString();

真实用途是,JSONObject json对象最终会推给freemarker,如下图,如果ST_OWNER_NAME属性没了,freemarker引擎会报错
Readiay 2016-11-11
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
		String jsonStr = "{\"title\":null, \"name\":\"zs\"}";
		
		net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonStr);
		
		System.out.println(json);
	}
  • 打赏
  • 举报
回复
说实话完全没看到你这有什么意义?
金杜 2016-11-11
  • 打赏
  • 举报
回复


上面说的不清楚,我是说JSONObject.parseObject(jsonString) 后的,结果json,里面只有一个属性了,null的属性被过滤掉了

我的问题是parseObject (json字符串原来有2个属性,转JSONObject后,只有一个了)
  • 打赏
  • 举报
回复
JSONObject.toJSONString(json,SerializerFeature.WriteMapNullValue)
金杜 2016-11-11
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
使用jsoncofig 把null转为“”
fastjson 有jsoncofig 吗? net.sf.json.JsonConfig 是把对象转json字符串的时候用的吧
  • 打赏
  • 举报
回复
使用jsoncofig 把null转为“”

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧