JSONObject基本内容(二)

参考内容:http://swiftlet.net/archives/category/json  十分感谢!!!

这部分的内容主要是讲述 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());
时间: 2024-08-01 16:40:55

JSONObject基本内容(二)的相关文章

JSONObject基本内容(三)

参考资料:http://swiftlet.net/archives/category/json    十分感谢!!!~~ 第三篇的内容,主要讲述的有两点: 1 .如何获取JSONObject中对应key的value.   2.如何把JSONObject转换为javaBean对象. 一)获取JSONObject中属性值 首先我们写一个javaBean类 public class Emp { private String name; private Integer age; private bool

JSONObject基本内容(一)

参考资料: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-

第四周内容(二)

交换机的主要技能指标 1.背板宽度 背板是交换机输入端和输出端之间的物理通道.背板带宽越宽,交换机数据处理速度就越快,数据包转发延迟越小,性能越优越.在选择交换机背板带宽时,还要注意另外一个参数,即全双工端口带宽. 2.全双工端口带宽 全双工端口带宽的计算方法是:端口数*端口速率*2.交换机选型的一个重要参数是:背板带宽/全双工端口带宽.比值越大,交换机就越能趋近高性能无阻塞的交换. 3.帧转发速率 帧转发速率是指交换机每秒钟能够转发帧的最大值.延时是指帧的第一个比特进入交换机到帧的最后一个比特

HTML5基础内容(二)

HTML(HyperText Markup Language)超文本标记语言 一.HTML注释 元素就是标签,标签就是元素. 注释中的内容不会在页面中显示,但是可以在源码中看到. 可以通过编写注释来对代码进行描描述,从而帮助其他工作人员开发.(注释要简洁明了) 方法:可以选中HTML代码,然后Ctrl + / 键. HTML注释:<!-- 需要注释的内容 --> 二.HTML标签属性 通过属性来设置标签如何处理标签的内容. 属性只能在开始标签中添加,实际上就是一个名值对结构(属性名 = &qu

微信公众号 扫码支付 模式二 demo

扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 用户扫描商户展示在各种场景的二维码进行支付. 步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码(如图6.1),展示在各种场景,用于用户扫描购买. 步骤2:用户使用微信"扫一扫"(如图6.2)扫描二维码后,获取商品支付信息,引导用户完成支付(如图6.3). 图6

JSONObject 自定义过滤配置

一.自定义过滤器说明 PropertyPreFilter 根据PropertyName判断是否序列化  PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化  NameFilter 修改Key,如果需要修改Key,process返回值则可  ValueFilter 修改Value  BeforeFilter 序列化时在最前添加内容  AfterFilter 序列化时在最后添加内容 二.NameFilter使用demo JSONObject.toJ

WebMagic爬虫框架及javaEE SSH框架将数据保存到数据库(二)

关于一些基本内容可查看上一篇博客:http://blog.csdn.net/u013082989/article/details/51176073 一.首先看一下爬虫的内容: (1)学科类型.课程.课程对应章节.课程对应参考教材(主要是要将课程章节对应到上一级爬取的课程上,还有就是课程教材的爬取比较麻烦,下面会讲到) 课程章节: 课程教材 教材内容 二.实体类的设计: (1)课程类.课程对应章节类(一对多),课程对应教材类(一对多),关于hibernate映射文件就不说明了. 三.爬取课程及对应

二维码登录

二维码登录原理及生成与解析 v一.前言 这几天在研究二维码的扫码登录.初来乍到,还有好多东西不懂.在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码.一时兴起,决定自己亲手试一试.本人是通过QRCode实现的,下面具体的说一下. v二.二维码原理 基础知识参考:http://news.cnblogs.com/n/191671/ 很重要的一部分知识:二维码一共有 40 个尺寸.官方叫版本 Version.Version 1 是 21 x 21 的矩阵,Version 2 是

Java生成微信二维码及logo二维码

依赖jar包 QrCode.jar:https://pan.baidu.com/s/1c1PYV0s 加入本地 maven: mvn install:install-file -Dfile=QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar 实例源码 import com.swetake.util.Qrcode; import javax.imageio.ImageIO; import jav