SpringBoot/Go之Json传输过程中自动去除对象中未赋值的字段(Go语言的Json优化)

背景:

        在开发过程中,我们需要传输一些Josn数据,但是在Json传输中,要求结构体或者对象中,为赋值的字段变量,自动的去除,便于接收端的处理。针对这个需求,一共有Java 的开发需求同时也有Go的开发需求。

一. SpringBoot的方案设计:

首先我们要使用Json的Maven依赖,这里采用阿里的FastJson

        <!--    该依赖是针对Json的处理,可以实现Object转Json,也可以实现Json转Object(主要是使用在HTTP接收请求的时候使用)-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.45</version>
        </dependency>

然后就是对象的创建,我们采用简单的Book对象处理:

public class Book implements Serializable {
    /*
    //表示将字段id设置为隐藏,也就是说使用fastJson生成的Json字符串,不包含该字段的值。
    @JSONField(serialize = false)
     */
    @JSONField(name = "id")
    private int id;
    @JSONField(name = "name")
    private String Name;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + Name +
                '}';
    }

    public String bookHello(){
        System.out.println("Hello Book");
        return "hello";
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }
}

最后就是测试:

    @Test
    void test10() {
        System.out.println("------------测试------------");
        Book book = new Book();
        book.setId(2);
        System.out.println(book);
        JSON books = (JSON) JSON.toJSON(book);
        System.out.println(books);
    }

测试结果如下:在传输中,我们只需要传输books就可以了。非常的方便。

------------测试------------
Book{id=2, name='null}
{"id":2}

二. Go的方案设计:

首先就是结构设计:(要明确的指出如果为空的时候,自动的去除该字段)

`json:"omitempty"`就是表示为空值的时候自动的去除
type User struct {
	name string `json:"omitempty"`
	age  int    `json:"omitempty"`
}

然后就是测试:

func Test2(t *testing.T) {
	fmt.Println("-----Hello------")
	var user User
	user.name = "gcg"
	fmt.Println(user)
	Userjson,err:= json.Marshal(user)
	if err !=nil{
		fmt.Println("转Json异常")
	}
	fmt.Println(string(Userjson))

}

测试结果:

=== RUN   Test2
-----Hello------
{gcg 0}
{"name":"gcg"}
--- PASS: Test2 (0.00s)
PASS

2. 关于Go语言转Json的快速转化包工具json-iterator:

需要使用的包:

 jsoniter "github.com/json-iterator/go"

具体的使用:

// 快速转Json实体包
var json = jsoniter.ConfigCompatibleWithStandardLibrary

type Request struct {
	Tcid string `json:"tcid"`
	I    int    `json:"i"`
	Pack string `json:"pack"`
}

func BenchmarkJson(t *testing.B) {
	var re Request
	re.I = 1
	re.Pack = "中国心"
	re.Tcid = "123456"
	for i:=0;i<=t.N;i++ {
		s,_ :=json.Marshal(re)
		fmt.Println("转Json: ",string(s))
		var re2 Request
		json.Unmarshal(s,re2)
		fmt.Println("Json转实体变量: ",re2.Pack)
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值