golang怎样检查一个json可以完美匹配一个定义好的结构体

解决方案
1.用mapinterface{}接json反序列化后的结果
2.用反射把结构体的 json tags给存起来为一个map
3.加个计数器,记录两者key匹配的数目,跟目标结构体json tags字段数量比对就出来了

方法比较笨,不过能解决你的问题。若需要减少反复的内存分配。在公共空间直接分配内存把步骤2的数据给存起来就好了。


■网友
s2 := json.Marshal(json.Unmarshal(s, \u0026amp;x))
s == s2

■网友
首先,这么做的目的是什么?是工程问题,还是学术问题?

泛泛地来讲,可以分三种情况讨论:
A, 如果json格式是固定的,那么struct肯定能一一对应。
B, 假设json是动态的,但可以按类型分发到不同路径,那最终每个路径的情况就是A。
C, 假设json是动态的,但只发到1个路径,这样就无法用1个静态的struct解析动态的json。

对于C情况,要解决的话只能退一步到不够完美的方法,简单点就用mapinterface{},这就和javascript差不多了。当然,也可以进一步改造成上述的B情况,只是有这个必要吗?

■网友
谢邀…… Go 1.10会在Decoder加入DisallowUnknownFields选项 (https://go-review.googlesource.com/c/go/+/74830)
dec := json.NewDecoder(strings.NewReader(jsonStream))dec.DisallowUnknownFields()err := dec.decode(\u0026amp;obj)return err == nil 【golang怎样检查一个json可以完美匹配一个定义好的结构体】


    推荐阅读