json转化

实现将不同格式对象转化为json对象,同时讨论了如何实现过滤字段。

感谢二次加工博文:http://www.cnblogs.com/vmax-tam/p/4624811.html;http://www.cnblogs.com/vmax-tam/p/4624869.html

一:转json

参考资料:http://swiftlet.net/archives/category/json,十分感谢~

 

平时做项目,难免有遇到使用json对象的时候,这个东西不难,但是一不使用久了,就会忘记,所以把它的基本用法写一下。

 

前提: 导入相关的jar文件:

commons-lang-1.0.4.jar 
commons-collections-2.1.jar 
commons-beanutils-1.8.0.jar 
json-lib-2.4.jar 
ezmorph-1.0.6.jar 
commons-logging-1.1.jar

 

然后就可以开发啦~

 

一)javaBean转换为json

  (1)先写一个javaBean

  

复制代码
public class User  implements Serializable{
    private static final long serialVersionUID = 1L; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
复制代码

然后就把这个javaBean转换为JSONObject:

复制代码
    public static void main(String[] args) {
        //javaBean对象转换为json字符串 User user = new User(); user.setUsername("Rime"); user.setPassword("1234"); JSONObject json1 = JSONObject.fromObject(user); System.out.println(json1.toString()); //map转换为json字符串 HashMap<Object,Object> userMap = new HashMap<Object,Object>(); userMap.put("username", "Rime"); userMap.put("password", "1234"); JSONObject json2 = JSONObject.fromObject(userMap); System.out.println(json2.toString()); }
复制代码

输出的内容如下:

{"password":"1234","username":"Rime"}
{"username":"Rime","password":"1234"}

 

看到这里,你可能会有疑问,是不是什么对象都能够转换为JSONObject呢?答案当然是:不。

JSONObject.fromObject(Object object)方法只对以下集中类型的对象有效:JSON formatted strings,Maps,DynaBeans and JavaBeans。

【注意】DynaBeans是commons-beanutils定义的动态bean。DynaBean并不是Java中所定义的Bean,而是一种"假"的Bean。因为它并不是通过getXXX和setXXX方法,对XXX属性进行取值和设值的。
如果object是其他类型的参数呢?比如说数字,逻辑值,非json格式的字符串,那么将生产空的JSONObject对象。

 

二:字段过滤

这部分的内容主要是讲述 javaBean转换为JSONObect时,如果有些属性不需要转换,那么该如何操作。

过滤属性在什么时候会用到呢?

有时候我们会把对象以json格式传送,如果一个对象携带着一些私人信息,那么我们就要先把这些信息过滤掉,再进行传输了。

 

一)方法一:实现JSONString接口,实现toJSONString方法

那么我们现在写一个Person类,实现这个JSONString接口

复制代码
public class Person implements JSONString{
    private String name; private String address; private String sex; @Override public String toJSONString() { //{"name" : "name" , "sex" : "sex"},这里省略了address属性,因为我们要把它过滤掉 return "{\"name\":\"" + name + "\",\"sex\":\"" + sex + "\"}"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
复制代码

然后就写相应的测试

复制代码
    public static void main(String[] args) {
        /** * 转换为json对象时,排除掉person中address属性的三种方法 */ System.out.println("方法一:Person类实现JSONString接口,实现toJSONString方法"); Person person = new Person(); person.setName("Rime"); person.setSex("men"); person.setAddress("china"); JSONObject json = JSONObject.fromObject(person); System.out.println(json.toString()); }
复制代码

输出结果:   

方法一:Person类实现JSONString接口,实现toJSONString方法
{"name":"Rime","sex":"men"}

 

二)方法二:在jsonConfig中配置excludes

由于Person类已经使用了方法一,具有侵入性,我们再建一个类Person2

复制代码
public class Person2 {
    private String name;
    private String address; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
复制代码

然后过滤操作如下:

复制代码
        Person2 person2 = new Person2();
        person2.setName("Rime2");
        person2.setSex("men");
        person2.setAddress("china");
        JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setExcludes(new String[] {"address"});//排除掉address属性 JSONObject json2 = JSONObject.fromObject(person2,jsonConfig); System.out.println(json2.toString());
复制代码

 

三)方法三:在jsonConfig中配置过滤器,把属性过滤掉

过滤操作如下:

复制代码
        Person2 person3 = new Person2();
        person3.setName("Rime3");
        person3.setSex("men");
        person3.setAddress("china");
        JsonConfig jsonConfig2 = new JsonConfig(); //配置过滤器 jsonConfig2.setJsonPropertyFilter(new PropertyFilter() { @Override public boolean apply(Object source, String name, Object value) { //source:对象类型 //name:属性名 //value:属性值 //可根据以上三种组合来过滤 //Person2类型的address属性过滤掉 return source instanceof Person2 && name.equals("address"); } }); JSONObject json3 = JSONObject.fromObject(person3,jsonConfig2); System.out.println(json3.toString());

转载于:https://www.cnblogs.com/updown-j/articles/4626121.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值