将对象转换成字符串,是非常常用的功能,尤其在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; } @Override public String toJSONString() { //return "{\"id\":" + this.id + ",\"name\":\"" + this.name + "\",\"password\":\""+ this.password +"\"}"; //忽略敏感字段password return "{\"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() { @Override public 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() { @Override public 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内容转码等。
相关推荐
大家都知道jsonlib2.4之后有了属性过滤的功能,就是当把一个bean转成json的时候能指定哪些属性输出哪些不输出,不过代码很难看,如下 JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new ...
配置文件JsonConfig 是一个简单的配置框架,基于 json 和 .NET Framework 4.0+ 中可用的动态类型入门在您的项目中,添加对 JsonConfig.dll 的引用使用 json 格式的配置将名为“app.json.config”的文件添加到您的...
JsonConfig自述文件关于JsonConfig是一个易于使用的配置库,它允许C#/。NET应用程序使用基于JSON的配置文件,而不必使用繁琐的web.config / application.config xml文件。 它基于JsonFX和C#4.0动态功能。 允许将...
JSONArray.fromObject(map)报错:Could not initialize class net.sf.json.JsonConfig。ireport 需要高于2.1版本的包。于是就找了这些包。最后2.2.2适合
Jsonex JSONCoder是一个轻量级的通用对象序列化/反序列化库,类似于Jackson,GSON或FastJson。 多年来,该库已在各种eBay项目中广泛使用。 它不能替代其他流行的库。 但是,它解决了一些其他替代产品无法提供或无法...
JSONArray jsonArray = JSONArray.fromObject(jsonString, jsonConfig); JSONObject jsonObject; Object pojoValue; List<T> list = new ArrayList(); for (int i = 0; i (); i++) { jsonObject = jsonArray....
使用json时候将会用到的一个jar包,发现这个包在网上提供的比较少.缺少这个包可能导致Could not initialize class net.sf.json.JsonConfig 使用json时候将会用到的一个jar包,发现这个包在网上提供的比较少.缺少这个...
JSON net.sf.json 依赖的jar包 亲测可用 一次导入所有jar包
JSON Config - 一个Swift 3 JSON配置读取库。读取JSON文件从服务器端配置
在用到net.sf.json的时候有时候会因为缺少依赖库而报错,此时可以试试这个包
java后端返回json给前端,包含对象JsonObject,JsonConfig,JsonArray.
json-lib-2.4-jdk15 demo: package com; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import ...
json开发所需要的jar包,fastjson-1.2.2.jar,fastjson-1.2.2-sources.jar,json.jar。不用到处找了
JSONConfig:抽象重新配置文件类,交替xml,同时支持json文件
通过JSONObject json = ... 进入此方法后会继续调用fromObject(Object, JsonConfig)的重载方法,在此重载方法中会通过instanceOf判断待转换的Object对象是否是枚举、注解等类型,这些特殊类型会有特别的判断方法。
ezmorph.jar包是在使用json时候将会用到jar包,缺少这个包可能导致Could not initialize class net.sf.json.JsonConfig,给大家提供ezmorph-1.0.6.jar,有需要的赶快下载吧! ezmorph.jar基本简介 EZMorph是一个...
设置JSON-LIB让其过滤掉引起循环的字段。 Java代码 代码如下: JsonConfig config = new JsonConfig(); config.setIgnoreDefaultExcludes(false); config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT)...
├── config.go├── config.jsonconfig.json内容{ "name" : "akkuman", "urls" : ["xx.com","ww.com"], "info" : { "qq" : "123456", "weixin": "123456" }}该库取出来的都是类型为interface{}的数据,如需取出...
springboot-json-configconfig.json mysql Redis动态配置 不通过spring默认配置,并使用通用mapper(tk.mapper)
在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于...