背景:
在开发过程中,我们需要传输一些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)
}
}