已解决
golang的json转pb验证
来自网友在路上 159859提问 提问时间:2023-10-20 12:39:26阅读次数: 59
最佳答案 问答题库598位专家为你答疑解惑
基于这篇文章的最后一个代码进行验证。
https://blog.csdn.net/mijichui2153/article/details/133894403?csdn_share_tail=%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.com/golang/protobuf/jsonpb
- github.com/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.com/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"id":"342224199110521627","nickName":"bangbang","pen_name":"luxun","name":"shuozhuo","age":18,"Email":"2300659533@qq.com","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.com/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"id":"342224199110521627","nickName":"bangbang","school":"ZJU","pen_name":"luxun","name":"shuozhuo","age":18,"Email":"2300659533@qq.com","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.com/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"id":"342224199110521627","country":"china","name":"shuozhuo","age":18,"Email":"2300659533@qq.com","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.com/golang/protobuf/jsonpb"
)func main() {jsonStr := `{"myid":"342224199110521627","nickName":"bangbang","pen_name":"luxun","name":"shuozhuo","myage":18,"Email":"2300659533@qq.com","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,结果依然是能匹配过来的。
查看全文
99%的人还看了
相似问题
- django ModelSerializer自定义显示字段
- 替换sql,某个字段特定容
- Java之反射获取和赋值字段
- java mybatisplus generator 修改字段类型
- 使用用户代理字段进行浏览器检测(判断页面运行环境)
- js数组操作——对象数组根据某个相同的字段分组
- spring boot加mybatis puls实现,在新增/修改时,对某些字段进行处理,使用的@TableField()
- 【IDEA 使用easyAPI、easyYapi、Apifox helper等插件时,导出接口文档缺少代码字段注释的相关内容、校验规则的解决方法】
- mysql取出组内按照某时间最新一条数据的其他字段
- 基于geotools24.0的创建自动增长主键id字段的方法
猜你感兴趣
版权申明
本文"golang的json转pb验证":http://eshow365.cn/6-20262-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!