本文主要是介绍go json反序列化成指定类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介
简单的介绍一下使用go的json库,将json字符串反序列化成接口中指定的实现类
代码如下
package usejsontype ExamInterface interface {CheckRule(data any) bool
}type IntStru struct {DefalutVal int `json:"defalut_val"`Max int `json:"max"`Min int `json:"min"`
}func (i IntStru) CheckRule(data any) bool {if data.(int) < i.Max && data.(int) > i.Min {return true}return false
}func (i IntStru) New() {}type StringStru struct {DefaultVal string `json:"default_val"`Len int `json:"len"`
}func (s StringStru) CheckRule(data any) bool {if len(data.(string)) > s.Len {return false}return true
}
func (s StringStru) New() {}
测试用例
package usejsonimport ("encoding/json""fmt""testing"
)func TestRule(t *testing.T) {val := "{\"int\":{\"defalut_val\":0,\"max\":500,\"min\":30}}"var exam = map[string]interface{}{}err := json.Unmarshal([]byte(val), &exam)if err != nil {panic(err)}if val, ok := exam["int"]; ok {data, _ := json.Marshal(val)intr := &IntStru{}json.Unmarshal(data, intr)fmt.Println(intr.CheckRule(3))}val = "{\"string\":{\"default_val\":\"\",\"len\":3}}"err = json.Unmarshal([]byte(val), &exam)if err != nil {panic(err)}if val, ok := exam["string"]; ok {data, _ := json.Marshal(val)intr := &StringStru{}json.Unmarshal(data, intr)fmt.Println(intr.CheckRule("333"))}
}func TestMashal(t *testing.T) {s := StringStru{Len: 3}data, _ := json.Marshal(s)fmt.Println(string(data))i := IntStru{Max: 500, Min: 30}data, _ = json.Marshal(i)fmt.Println(string(data))
}
总结
其实主体逻辑在测试用例中,根据json字符串中特定字符串确定是将json串解析成何种子类,逻辑比较简单。
这篇关于go json反序列化成指定类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!