golang的json转pb验证

编程入门 行业动态 更新时间:2024-10-24 20:14:38

<a href=https://www.elefans.com/category/jswz/34/1769831.html style=golang的json转pb验证"/>

golang的json转pb验证

基于这篇文章的最后一个代码进行验证。

=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22133894403%22%2C%22source%22%3A%22mijichui2153%22%7D

1、准备

(1)依赖的第三方库

  • github/golang/protobuf/jsonpb
  • github/golang/protobuf/proto

(2)创建person.proto文件

syntax = "proto3";package person;message Person {string id = 1 [json_name = "myid"];string nickName = 2;string pen_name = 3;string name = 4;int32  age = 5 [json_name = "myage"];string Email = 6;string FullName = 7;
}

(3)构建可执行文件myperson.go

注:json字段与pb字段严格对齐。 

package main
import ("fmt""json2pb/person""github/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"id":"342224199110521627","nickName":"bangbang","pen_name":"luxun","name":"shuozhuo","age":18,"Email":"2300659533@qq","FullName":"zhuoshuo"}`fmt.Println("jsonStr is:", jsonStr)p1 := &person.Person{}jsonpb.UnmarshalString(jsonStr, p1)fmt.Println("p1=", p1.String())}

此时执行结果如下:

2、验证各关注点

2.1、proto定义不变json中多了若干字段会如何?

结论:json比proto多出来的字段不会被解析到pb,相当于不存在。 

package main
import ("fmt""json2pb/person""github/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"id":"342224199110521627","nickName":"bangbang","school":"ZJU","pen_name":"luxun","name":"shuozhuo","age":18,"Email":"2300659533@qq","FullName":"zhuoshuo","country":"china"}`fmt.Println("jsonStr is:", jsonStr)p1 := &person.Person{}jsonpb.UnmarshalString(jsonStr, p1)fmt.Println("p1=", p1.String())
}

在jsonStr中新增了school、country两个字段。执行结果如下:

 

2.2、proto定义不变json中少了若干字段会如何?

 结论:jsonStr中缺的字段转到pb后也缺少对应字段。

package main
import ("fmt""json2pb/person""github/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"id":"342224199110521627","country":"china","name":"shuozhuo","age":18,"Email":"2300659533@qq","FullName":"zhuoshuo"}`fmt.Println("jsonStr is:", jsonStr)p1 := &person.Person{}jsonpb.UnmarshalString(jsonStr, p1)fmt.Println("p1=", p1.String())
}

在jsonStr中移除nickName、pen_name字段,执行结果如下:

2.3、json有pb不存在的字段会如何?

和2.1是完全一样的。例如将jsonStr中的nickName改成nickName1,就会被当成一个全新字段。

2.4、pb中定义的json_name是否生效?

结论:转pb时候,json中的字段名会尝试匹配proto字段名以及其后的json_name名。

package main
import ("fmt""json2pb/person""github/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"myid":"342224199110521627","nickName":"bangbang","pen_name":"luxun","name":"shuozhuo","myage":18,"Email":"2300659533@qq","FullName":"zhuoshuo"}`fmt.Println("jsonStr is:", jsonStr)p1 := &person.Person{}jsonpb.UnmarshalString(jsonStr, p1)fmt.Println("p1=", p1.String())
}

如图将jsonStr中的id字段改成proto中id字段的别名myid、age改成myage,结果依然是能匹配过来的。

更多推荐

golang的json转pb验证

本文发布于:2023-12-07 01:47:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1669701.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:golang   json   pb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!