diff --git a/g/encoding/gparser/gparser.go b/g/encoding/gparser/gparser.go index 3fee6ea10..da1256416 100644 --- a/g/encoding/gparser/gparser.go +++ b/g/encoding/gparser/gparser.go @@ -9,12 +9,15 @@ package gparser import ( "gitee.com/johng/gf/g/encoding/gjson" + "encoding/json" ) type Parser struct { json *gjson.Json } +// 将变量转换为Parser对象进行处理,该变量至少应当是一个map或者array,否者转换没有意义 +// 该参数为非必需参数,默认为创建一个空的Parser对象 func New (values...interface{}) *Parser { if len(values) > 0 { return &Parser{gjson.NewJson(values[0])} @@ -137,26 +140,40 @@ func (p *Parser) ToToml() ([]byte, error) { return p.json.ToToml() } +// 将变量解析为对应的struct对象,注意传递的参数为struct对象指针 +func (p *Parser) ToStruct(v interface{}) error { + if c, e := p.ToJson(); e == nil { + return json.Unmarshal(c, v) + } else { + return e + } +} + func VarToXml(value interface{}, rootTag...string) ([]byte, error) { - return gjson.NewJson(value).ToXml(rootTag...) + return New(value).ToXml(rootTag...) } func VarToXmlIndent(value interface{}, rootTag...string) ([]byte, error) { - return gjson.NewJson(value).ToXmlIndent(rootTag...) + return New(value).ToXmlIndent(rootTag...) } func VarToJson(value interface{}) ([]byte, error) { - return gjson.NewJson(value).ToJson() + return New(value).ToJson() } func VarToJsonIndent(value interface{}) ([]byte, error) { - return gjson.NewJson(value).ToJsonIndent() + return New(value).ToJsonIndent() } func VarToYaml(value interface{}) ([]byte, error) { - return gjson.NewJson(value).ToYaml() + return New(value).ToYaml() } func VarToToml(value interface{}) ([]byte, error) { - return gjson.NewJson(value).ToToml() + return New(value).ToToml() +} + +// 将变量解析为对应的struct对象,注意传递的参数为struct对象指针 +func VarToStruct(value interface{}, obj interface{}) error { + return New(value).ToStruct(obj) } \ No newline at end of file diff --git a/geg/encoding/gparser.go b/geg/encoding/gparser.go index 1f1fb7263..fc6fd2f81 100644 --- a/geg/encoding/gparser.go +++ b/geg/encoding/gparser.go @@ -160,6 +160,21 @@ func makeJson3() { fmt.Println(string(c)) } +func toStruct1() { + type Info struct { + Name string + Url string + } + o := Info{} + p := gparser.New(map[string]string{ + "Name" : "gf", + "Url" : "https://gitee.com/johng", + }) + p.ToStruct(&o) + fmt.Println("Name:", o.Name) + fmt.Println("Url :", o.Url) +} + func convert() { p := gparser.New(map[string]string{ "name" : "gf", @@ -199,5 +214,5 @@ func remove1() { func main() { - remove1() + toStruct1() } \ No newline at end of file