原文:https://blog.csdn.net/lrcoop/article/details/52683900#commentBox CSDN转载比较麻烦,就不排版, 可以去源文,看了看,这个博主也是转载的
将对象转换成字符串,是非常常用的功能,尤其在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://blog.csdn.net/lrcoop/article/details/52683900#commentBox

net.sf.json.JsonConfig 使用详解相关推荐

  1. java中的json_JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  2. java web json_java web中对json的使用详解

    一.在Java Web的开发过程中,如果希望调用Java对象转化成JSON对象等操作.则需要引入以下jar包,不然运行时则报错. 1.commons-beanutils.jar 2.commons-c ...

  3. python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  4. java json path_Java使用JSONPath解析JSON完整内容详解

    JsonPath是一种简单的方法来提取给定JSON文档的部分内容. JsonPath有许多编程语言,如Javascript,Python和PHP,Java. JsonPath提供的json解析非常强大 ...

  5. python3 json模块_详解python 3.6 安装json 模块(simplejson)

    JSON 相关概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反 ...

  6. MySQL操作之JSON数据类型操作详解

    MySQL操作之JSON数据类型操作详解 这篇文章主要介绍了MySQL操作之JSON数据类型操作详解,内容较为详细,具有收藏价值,需要的朋友可以参考. 概述 mysql自5.7.8版本开始,就支持了j ...

  7. python post json参数,Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  8. daemon.json配置参数详解

    ** daemon.json配置参数详解 ** 背景 docker安装的时候没有daemon.json这个文件 一般情况下,daemon.json中配置的项目参数,在启动参数中同样适用.(有些可能会冲 ...

  9. docker-daemon.json各配置详解

    docker-daemon.json各配置详解{"api-cors-header":"", ------在引擎API中设置CORS标头"authori ...

最新文章

  1. 区块链 智能合约 简介
  2. 废芯片做出来的艺术品!值得一看!
  3. Swift傻傻分不清楚系列(四)基本运算符 o_O!???
  4. python中的threading_python中的threading模块使用说明
  5. Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构
  6. python分类时特征选择_关于python:是否有可用于分类数据输入的特征选择算法?...
  7. jQuery+CSS3实现404背景动画特效【转】
  8. 大楼通信综合布线系统_什么是网络综合布线系统组成?网络综合布线系统如何选择线缆?...
  9. 计算机操作系统笔记(二)
  10. hadoop生态--Hive(4)--Hive分区中的动态分区、静态分区
  11. AntDesign Upload组件上传图片
  12. Office在线协作(一)- 在本地服务器上安装ONLYOFFICE Docs Community Edition For Windows Server - 超详细安装教程
  13. 央行征信中心:第二代个人征信系统将于1月20日上线
  14. leetcode刷题技巧
  15. 【侯捷】C++STL标准库与泛型编程(第二讲)
  16. 为什么到苹果官方售后更换电池,要求用户退出ID呢?
  17. TP-link WR720N路由器刷入OpenWrt
  18. 计算机动画的应用分析,自然用户界面研究与计算机动画
  19. 写给一个外汇女交易员的信(连载一)
  20. UCF101数据集的处理问题

热门文章

  1. 2018最新动脑学院java全套课程分享
  2. 监听文本框输入开发仿新浪微博限制输入字数的textarea插件
  3. pyautogui实现自动连接GP VPN
  4. 第二次作业:王者荣耀案例分析
  5. 上拉电阻的作用与计算
  6. excel批量修改文件名方法
  7. 用300行代码写一个童年小游戏,俄罗斯方块
  8. R语言练习题答案(5)第五章 初级绘图
  9. Python 进阶 - 元组解包
  10. java daemon进城关闭_daemontools检测进程,退出拉起