支持通过配置传入XmlName, 默认值 XmlData
This commit is contained in:
@ -10,12 +10,13 @@ package wrapper
|
||||
import (
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
"fmt"
|
||||
dynamicstruct "git.zhangdeman.cn/zhangdeman/dynamic-struct"
|
||||
"git.zhangdeman.cn/zhangdeman/serialize"
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
func NewJson(sourceData string) (*ownJson, error) {
|
||||
func NewJson(sourceData string, o *Option) (*ownJson, error) {
|
||||
gjsonRes := gjson.Parse(sourceData)
|
||||
if gjsonRes.Value() == nil {
|
||||
return nil, errors.New("source data parse result is nil")
|
||||
@ -24,10 +25,17 @@ func NewJson(sourceData string) (*ownJson, error) {
|
||||
if !gjsonRes.IsObject() {
|
||||
return nil, errors.New("source result is not map or struct Marshal string")
|
||||
}
|
||||
if nil == o {
|
||||
o = &Option{}
|
||||
}
|
||||
if o.XmlName == "" {
|
||||
o.XmlName = "XmlData"
|
||||
}
|
||||
oj := &ownJson{
|
||||
sourceData: sourceData,
|
||||
gjsonResult: gjsonRes,
|
||||
structBuilder: dynamicstruct.NewStruct(nil),
|
||||
o: o,
|
||||
}
|
||||
if err := oj.GenerateStruct(); nil != err {
|
||||
return nil, err
|
||||
@ -40,6 +48,7 @@ type ownJson struct {
|
||||
gjsonResult gjson.Result // 数据源解析为gjson
|
||||
structBuilder dynamicstruct.IBuilder // 结构体构造器
|
||||
structRes any // 解析的结构体值
|
||||
o *Option // 一些操作选项
|
||||
}
|
||||
|
||||
// GenerateStruct 生成结构体字段列表
|
||||
@ -49,7 +58,7 @@ func (oj *ownJson) GenerateStruct() error {
|
||||
return true
|
||||
})
|
||||
// 追加xml的标签
|
||||
oj.structBuilder.AddField("XMLName", "", xml.Name{}, `json:"-" xml:"XmlData"`, false)
|
||||
oj.structBuilder.AddField("XMLName", "", xml.Name{}, fmt.Sprintf(`json:"-" toml:"-" yml:"-" init:"-" xml:"%v"`, oj.o.XmlName), false)
|
||||
val := oj.structBuilder.Build().New()
|
||||
if err := serialize.JSON.UnmarshalWithNumber([]byte(oj.sourceData), &val); nil != err {
|
||||
return err
|
||||
|
Reference in New Issue
Block a user