GSON将Java对象转成JSON时,如何排除某些字段

    1. GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用。本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段。

      最简单的用法

      假设有下面这个类:

       1 class MyObj {
       2
       3   public int x;
       4   public int y;
       5
       6   public MyObj(int x, int y) {
       7       this.x = x;
       8       this.y = y;
       9   }
      10 }
      最简单的GSON用法如下所示:
      @Test
          public void gson() {
              MyObj obj = new MyObj(1, 2);
              String json = new Gson().toJson(obj);
              Assert.assertEquals("{\"x\":1,\"y\":2}", json);
          }
      
      
       
      方法1:排除transient字段

      这个方法最简单,给字段加上 transient 修饰符就可以了,如下所示:

      class MyObj {
      
        public transient int x; // <---
        public int y;
      
        public MyObj(int x, int y) {
            this.x = x;
            this.y = y;
        }
      
          }
      @Test
          public void gson() {
              MyObj obj = new MyObj(1, 2);
              String json = new Gson().toJson(obj);
              Assert.assertEquals("{\"y\":2}", json); // <---
          }
      方法2:排除Modifier为指定类型的字段

      这个方法需要用GsonBuilder定制一个GSON实例,如下所示:

      class MyObj {
      
        protected int x; // <---
        public int y;
      
        public MyObj(int x, int y) {
            this.x = x;
            this.y = y;
        }
      
      }
      @Test
          public void gson() {
          Gson gson = new GsonBuilder()
              .excludeFieldsWithModifiers(Modifier.PROTECTED) // <---
              .create();
      
            MyObj obj = new MyObj(1, 2);
            String json = gson.toJson(obj); // <---
            Assert.assertEquals("{\"y\":2}", json);
      }
          
      方法3:使用@Expose注解

      注意,没有被 @Expose 标注的字段会被排除,如下所示:

      class MyObj {
      
        public int x;
        @Expose public int y; // <---
      
        public MyObj(int x, int y) {
            this.x = x;
            this.y = y;
        }
      
          }
      @Test
          public void gson() {
        Gson gson = new GsonBuilder()
          .excludeFieldsWithoutExposeAnnotation() // <---
          .create();
      
        MyObj obj = new MyObj(1, 2);
        String json = gson.toJson(obj);
        Assert.assertEquals("{\"y\":2}", json);
          }

      方法4:使用ExclusionStrategy定制字段排除策略

      这种方式最灵活,下面的例子把所有以下划线开头的字段全部都排除掉:

      class MyObj {
      
        public int _x; // <---
        public int y;
      
        public MyObj(int x, int y) {
            this._x = x;
            this.y = y;
        }
      
          }
      @Test
          public void gson() {
        ExclusionStrategy myExclusionStrategy = new ExclusionStrategy() {
      
            @Override
            public boolean shouldSkipField(FieldAttributes fa) {
          return fa.getName().startsWith("_");
            }
      
            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
          return false;
            }
      
        };
      
        Gson gson = new GsonBuilder()
          .setExclusionStrategies(myExclusionStrategy) // <---
          .create();
      
        MyObj obj = new MyObj(1, 2);
        String json = gson.toJson(obj);
        Assert.assertEquals("{\"y\":2}", json);
          }

      来自http://blog.csdn.net/zxhoo/article/details/21471005

       
时间: 2024-11-03 01:25:01

GSON将Java对象转成JSON时,如何排除某些字段的相关文章

【代码分享——Java&amp;Json】Json转成java对象,已经java对象转成Json对象

做记录用,肯定有地方不完整,先放着吧 [代码分享--Java&Json]Json转成java对象,已经java对象转成Json对象,布布扣,bubuko.com

无废话Jersey构建RESTful服务之WebService系统教程 --3 [JAVA对象转成JSON输出]

一. 总体说明 XML和JSON 是最为常用的数据交换格式.本例子演示如何将JAVA对象,转换成JSON输出. 二.流程 1.在上文项目中, 在“cn.itrush.rest.resources.UserResource“中增加代码,代码如下: 1 package cn.itrush.rest.resources; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 impo

Java对象转换成Json字符串是无法获得对应字段名

问题: 代码中已经标注 @JSONField(name = "attrs") private String abc; public String getA() { return abc; } public void setA(String abc) { this.abc = abc; } 在发送消息的时候,会发现消息接受到的Json消息是abc对应的字段是a. 解决方法: 发现这个问题的时候,大概感觉应该是get和set函数名的为题,将其改成getAbc(),setAbc(),再发送消

Ajax原生请求和java对象转成json

\黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day23-资料源码\ajax_code\day23_3 本代码中有模拟 jquery里面的对Ajax的简化封装: json2.jsp  Ajax原生请求 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@

如何将java对象转换成json数据

package cn.hopetesting.com.test; import cn.hopetesting.com.domain.User;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import org.junit.Test; import java.io.File;import java.io.FileWriter;i

Java对象转换成Json字符串

使用gson-2.3.1.jar package org.acooly.thrift.demo.client; import java.util.ArrayList; import com.google.gson.Gson; public class json { public static void main(String[] args) {          ArrayList list=new ArrayList();     Student s1=new Student();     s

FastJson、Jackson、Gson进行Java对象转换Json的细节处理

前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的属性 具体案例如下: AutoPartsSearchRequest 有以下属性: public static void main(String[] args

Gson把对象转成json格式的字符串

最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson. 经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段. 下面是一个简单的例子:

将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型

将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型 问题描述: java里面时间类型转换成json数据就成这样了:"createTime":{"date":30,"day":3,"hours":15,"minutes":14,"month":3,"nanos":0,"seconds"