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. Android studio 设置忽略文件
  2. 物体检测中的Objectness是什么?
  3. vux 组件打造手机端项目
  4. 家庭厨房,如何共享美食?|回家吃饭产品分析
  5. HP LoadRunner 12.02 Tutorial T7177-88037教程独家中文版
  6. python爬取素材图片代码_基于Python爬取素材网站音频文件
  7. Jerry制作的软件工程里Design for Change的培训材料
  8. css 实现div阴影,上下移动
  9. aws集群重启_在AWS中设置Cassandra集群
  10. android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】
  11. JavaWeb——Get、Post请求中文乱码问题
  12. 64位系统目录在那里_旷视王珏:前Adobe首席科学家,手握64项专利,曾助力奥斯卡...
  13. C语言程序设计 基础入门(认识、描述与计算)
  14. 电脑不停,电脑不停重启
  15. 找不到设备.将计算机连接,win10系统宽带连接显示不可使用找不到设备的修复方法...
  16. 学java的就业方向_JAVA的就业方向是什么?
  17. 如何评价深度学习相关顶级期刊论文难复现的问题?
  18. oracle添加触发器权限,Oracle 'after create'触发器授予权限
  19. Altium Designer 导出网表 到Cadence教程
  20. 球半篮球分析,NBA总决赛:勇士VS凯尔特人

热门文章

  1. KubeEdge向左,K3S向右
  2. 一个自定义python分布式爬虫框架。
  3. 035-pgrep命令
  4. C语言初学者简单语法综合练习
  5. (转)在Windows平台上安装Node.js及NPM模块管理
  6. 实施ERP系统要先进行思考
  7. 2013年十大IT发展趋势预测
  8. BTC 再陷横荒之力,BCH 或成破局良器
  9. 欧洲、加拿大、澳大利亚新增2.1万个点可购买比特币现金
  10. 在freebsd下安装vim(Debian下类似)