gparser增加变量与struct相互转换特性

This commit is contained in:
John
2018-01-27 09:18:33 +08:00
parent bfe90e55df
commit 3906e0afdb
2 changed files with 39 additions and 7 deletions

View File

@ -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)
}

View File

@ -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()
}