From 3906e0afdb9d732d3c053d16b7a88d12df85b097 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 27 Jan 2018 09:18:33 +0800 Subject: [PATCH] =?UTF-8?q?gparser=E5=A2=9E=E5=8A=A0=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E4=B8=8Estruct=E7=9B=B8=E4=BA=92=E8=BD=AC=E6=8D=A2=E7=89=B9?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/encoding/gparser/gparser.go | 29 +++++++++++++++++++++++------ geg/encoding/gparser.go | 17 ++++++++++++++++- 2 files changed, 39 insertions(+), 7 deletions(-) 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