2019独角兽企业重金招聘Python工程师标准>>>

将对象转换成字符串,是非常常用的功能,尤其在WEB应用中,使用 JSON lib 能够便捷地完成这项工作。JSON lib能够将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。

无论出于何种原因,某些时候,我们需要对对象转为字符串的过程加以控制,最常见需求如数值格式化和日期格式化。JSON lib提供了JsonConfig对象,该对象能够深刻影响Java对象转成json字符串的行为。

增加忽略的属性

1. 第一种方式,实现JSONString接口的方法

package cn.ysh.studio.test;import java.io.Serializable;import net.sf.json.JSONObject;
import net.sf.json.JSONString;/*** * @author 杨胜寒* @date 2013-6-27**/
public class User implements JSONString, Serializable{private static final long serialVersionUID = 1L;private long id;private String name;private String password;public User(){}public User(Long id, String name, String password){this.id = id;this.name = name;this.password = password;}public User(String name, String password){this.name = name;this.password = password;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toJSONString() {//return "{\"id\":" + this.id + ",\"name\":\"" + this.name + "\",\"password\":\""+ this.password +"\"}";//忽略敏感字段passwordreturn "{\"id\":" + this.id + ",\"name\":\"" + this.name + "\"}";}public static void main(String[] args) {User user = new User(12L, "JSON", "json");System.out.println(JSONObject.fromObject(user).toString());}
}

2.第二种方式,通过jsonconfig实例,对包含和需要排除的属性进行方便的添加或删除

package cn.ysh.studio.test;import java.io.Serializable;import net.sf.json.JSONObject;
import net.sf.json.JSONString;
import net.sf.json.JsonConfig;/*** * @author 杨胜寒* @date 2013-6-27**/
public class User {private long id;private String name;private String password;public User(){}public User(Long id, String name, String password){this.id = id;this.name = name;this.password = password;}public User(String name, String password){this.name = name;this.password = password;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public static void main(String[] args) {JsonConfig config = new JsonConfig();  config.setExcludes( new String[]{"password"});User user = new User(12L, "JSON", "json");System.out.println(JSONObject.fromObject(user, config).toString());}
}

属性过滤器

使用propertyFilter可以允许同时对需要排除的属性和类进行控制,这种控制还可以是双向的,也可以应用到json字符串到java对象

JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {@Overridepublic boolean apply(Object source/* 属性的拥有者 */ , String name /*属性名字*/ , Object value/* 属性值 */) {return source instanceof User && "password".equalsIgnoreCase(name);}
});
User user = new User(12L, "JSON", "json");
System.out.println(JSONObject.fromObject(user, config).toString());

相对于上面的何种方式,如下的方式或许更为简便:

JsonConfig config = new JsonConfig();
config.registerPropertyExclusions(User.class, new String[]{"password"});
User user = new User(12L, "JSON", "json");
System.out.println(JSONObject.fromObject(user, config).toString());

自定义JsonBeanProcessor

JsonBeanProcessor和实现JsonString很类似,返回一个代表原来目标对象的合法JSONObject

JsonConfig config = new JsonConfig();
config.registerJsonBeanProcessor(User.class, new JsonBeanProcessor() {@Overridepublic JSONObject processBean(Object bean, JsonConfig config) {User user = (User) bean;return new JSONObject().element("id", user.getId()).element("name", user.getName());}
});
User user = new User(12L, "JSON", "json");
System.out.println(JSONObject.fromObject(user, config).toString());

自定义JsonValueProcessor

比如我们要控制JSON序列化过程中的Date对象的格式化,以及数值的格式化,JsonValueProcessor是最好的选择。

Map<String, Object> map = new HashMap<String, Object>();
map.put("date", new Date());
map.put("dates", Arrays.asList(new Date()));
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {//自定义日期格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");@Override/*** 处理单个Date对象*/public Object processObjectValue(String propertyName, Object date,JsonConfig config) {return simpleDateFormat.format(date);}@Override/*** 处理数组中的Date对象*/public Object processArrayValue(Object date, JsonConfig config) {return simpleDateFormat.format(date);}
});
System.out.println(JSONObject.fromObject(map, config).toString());

除了自定义日期格式外,还可以如法炮制,控制数值格式化、HTML内容转码等。

转载于:https://my.oschina.net/u/1379006/blog/229456

json-lib 常用功能相关推荐

  1. 微信小程序云开发——常用功能2:操作云数据库一键批量导入数据(导入json文件)

    微信小程序云开发--常用功能2:操作云数据库一键批量导入数据(导入json文件) 今天我们要添加100条数据.下面的过程是先创建一条记录,然后导出这条数据看json文件中是如何编辑字段的,然后仿照这个 ...

  2. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  3. Nginx实战部署常用功能演示(超详细版),绝对给力~~~

    前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...

  4. 使用JsonConfig控制JSON lib序列化

    原文  http://www.yshjava.cn/post/546.html 将对象转换成字符串,是非常常用的功能,尤其在WEB应用中,使用 JSON lib 能够便捷地完成这项工作.JSON li ...

  5. Linux系统Bash的常用功能(9)

    了解了基本的Linux文件文件系统的概念后,我们将更深入的了解一下Linux的其他方面的内容,那就是我们所使用的用户接口,也就是大家常听到的 『Shell』 ,『这个shell并不是黑客反弹的shel ...

  6. Wordpress模板主题中functions.php常用功能代码与常用插件[ 后台篇](持续收集整理)

    用Wordpress建站的初学者一定会需要用到的Wordpress模板主题中functions.php常用功能代码与常用插件.慢慢持续收集整理....... 目录 一.Wordpress模板主题中fu ...

  7. VC++常用功能开发

    文章还在持续更新 ing...... 大胸弟:来都来了,点点关注,点点赞 ,点点收藏,Thanks,Thanks,Thanks! 目录 文章还在持续更新 ing...... 大胸弟:来都来了,点点关注 ...

  8. uni-app的常用功能查询,uni-app入门级使用指南。

    uni-app的官方文档,功能简要查询查找 标语:即使深陷泥潭,也不要忘记仰望星空 文档阅读注意 本文档为博主使用uni-app总结的一些常用功能的使用方法,不喜勿喷,仅供快速查找常用的功能. uni ...

  9. TeeChart控件的安装与常用 功能设置

    TeeChart控件的安装 TeeChart 7.0 With Source在Delphi 7.0中的安装 一.删除Delphi7自带TeeChart  1.Component -> insta ...

最新文章

  1. 《强化学习周刊》第34期:牛津、谷歌、Facebook等 | 自动强化学习 (AutoRL):研究综述和开放性问题...
  2. linux shell 学习
  3. 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美
  4. asp.net操作IIS主机头的问题总结
  5. celery-04-操作b-执行人的一方
  6. CentOS切换运行级别 图形模式/命令行模式
  7. tcpdump非常实用的抓包实例
  8. 神经网络模型中class的forward函数何时调用_总结深度学习PyTorch神经网络箱使用...
  9. 《数据结构》二叉查找树
  10. 极客大学架构师训练营 大数据可视化、机器学习、PageRank算法、KNN分类算法、贝叶斯分类算法、推荐引擎算法、感知机、神经网络 第26课 听课总结
  11. pytorch求范数函数——torch.norm
  12. Abaqus 两套常用单位
  13. maxon电机中文名_MAXON电机完全手册(全系列).pdf
  14. android toast 怎么用,Android学习 Android Toast的使用
  15. 地下停车场的车内与车外,揭露了中年男人内心最沉重的痛
  16. 不要把别人对你的好,当作是理所当然
  17. k线符号图解大全_八种常见的K线符号
  18. 最新版校园招聘进大厂系列----------(1)阿里篇 -----未完待续
  19. php phalcon 安装,Phalcon框架安装与使用教程介绍
  20. 【艾琪出品】《计算机应用基础》【试题汇总1】

热门文章

  1. 【C++】 15_类于封装的概念
  2. 终于要揭开神秘面纱?Magic Leap将要展示产品
  3. 一种隐蔽性较高的Java ConcurrentModificationException异常场景
  4. hdu3635 Dragon Balls(带权并查集)
  5. [js高手之路] 设计模式系列课程 - DOM迭代器(2)
  6. git安装和使用案例
  7. windows server2003 升级到windows server2012
  8. 工作笔记--关于服务出问题时如何处理的流程
  9. PostgreSQL在函数内返回returning
  10. 您的用户配置文件没有正确加载