Files
gf/g/encoding/gparser/gparser.go

162 lines
4.6 KiB
Go
Raw Normal View History

// Copyright 2017 gf Author(https://gitee.com/johng/gf). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
2018-01-23 18:23:05 +08:00
// You can obtain one at https://gitee.com/johng/gp.
// 数据文件编码/解析.
package gparser
import (
"gitee.com/johng/gf/g/encoding/gjson"
)
2018-01-23 18:23:05 +08:00
type Parser struct {
json *gjson.Json
}
2018-01-23 18:23:05 +08:00
func New (values...interface{}) *Parser {
if len(values) > 0 {
return &Parser{gjson.NewJson(values[0])}
}
return &Parser{gjson.NewJson(nil)}
2018-01-23 16:40:48 +08:00
}
2018-01-23 18:23:05 +08:00
func Load (path string) (*Parser, error) {
if j, e := gjson.Load(path); e == nil {
2018-01-23 18:23:05 +08:00
return &Parser{j}, nil
} else {
return nil, e
}
}
// 支持的配置文件格式xml, json, yaml/yml, toml
2018-01-23 18:23:05 +08:00
func LoadContent (data []byte, fileType string) (*Parser, error) {
if j, e := gjson.LoadContent(data, fileType); e == nil {
2018-01-23 18:23:05 +08:00
return &Parser{j}, nil
} else {
return nil, e
}
}
// 将指定的json内容转换为指定结构返回查找失败或者转换失败目标对象转换为nil
// 注意第二个参数需要给的是变量地址
2018-01-23 18:23:05 +08:00
func (p *Parser) GetToVar(pattern string, v interface{}) error {
return p.json.GetToVar(pattern, v)
}
// 获得一个键值对关联数组/哈希表,方便操作,不需要自己做类型转换
// 注意如果获取的值不存在或者类型与json类型不匹配那么将会返回nil
2018-01-23 18:23:05 +08:00
func (p *Parser) GetMap(pattern string) map[string]interface{} {
return p.json.GetMap(pattern)
}
// 获得一个数组[]interface{},方便操作,不需要自己做类型转换
// 注意如果获取的值不存在或者类型与json类型不匹配那么将会返回nil
2018-01-23 18:23:05 +08:00
func (p *Parser) GetArray(pattern string) []interface{} {
return p.json.GetArray(pattern)
}
// 返回指定json中的string
2018-01-23 18:23:05 +08:00
func (p *Parser) GetString(pattern string) string {
return p.json.GetString(pattern)
}
// 返回指定json中的bool(false:"", 0, false, off)
2018-01-23 18:23:05 +08:00
func (p *Parser) GetBool(pattern string) bool {
return p.json.GetBool(pattern)
}
2018-01-23 18:23:05 +08:00
func (p *Parser) GetInt(pattern string) int {
return p.json.GetInt(pattern)
}
2018-01-23 18:23:05 +08:00
func (p *Parser) GetUint(pattern string) uint {
return p.json.GetUint(pattern)
}
2018-01-23 18:23:05 +08:00
func (p *Parser) GetFloat32(pattern string) float32 {
return p.json.GetFloat32(pattern)
}
2018-01-23 18:23:05 +08:00
func (p *Parser) GetFloat64(pattern string) float64 {
return p.json.GetFloat64(pattern)
}
// 根据pattern查找并设置数据
// 注意:写入的时候"."符号只能表示层级,不能使用带"."符号的键名
2018-01-23 18:23:05 +08:00
func (p *Parser) Set(pattern string, value interface{}) error {
return p.json.Set(pattern, value)
}
// 动态删除变量节点
func (p *Parser) Remove(pattern string) error {
return p.json.Remove(pattern)
}
// 根据约定字符串方式访问json解析数据参数形如 "items.name.first", "list.0"
// 返回的结果类型的interface{},因此需要自己做类型转换
// 如果找不到对应节点的数据返回nil
2018-01-23 18:23:05 +08:00
func (p *Parser) Get(pattern string) interface{} {
return p.json.Get(pattern)
}
// 转换为map[string]interface{}类型,如果转换失败返回nil
2018-01-23 18:23:05 +08:00
func (p *Parser) ToMap() map[string]interface{} {
return p.json.ToMap()
}
// 转换为[]interface{}类型,如果转换失败返回nil
2018-01-23 18:23:05 +08:00
func (p *Parser) ToArray() []interface{} {
return p.json.ToArray()
}
/* 以下为数据文件格式转换支持类型xml, json, yaml/yml, toml */
2018-01-23 18:23:05 +08:00
func (p *Parser) ToXml(rootTag...string) ([]byte, error) {
return p.json.ToXml(rootTag...)
}
2018-01-23 18:23:05 +08:00
func (p *Parser) ToXmlIndent(rootTag...string) ([]byte, error) {
return p.json.ToXmlIndent(rootTag...)
}
2018-01-23 18:23:05 +08:00
func (p *Parser) ToJson() ([]byte, error) {
return p.json.ToJson()
}
2018-01-23 18:23:05 +08:00
func (p *Parser) ToJsonIndent() ([]byte, error) {
return p.json.ToJsonIndent()
}
2018-01-23 18:23:05 +08:00
func (p *Parser) ToYaml() ([]byte, error) {
return p.json.ToYaml()
}
2018-01-23 18:23:05 +08:00
func (p *Parser) ToToml() ([]byte, error) {
return p.json.ToToml()
}
func VarToXml(value interface{}, rootTag...string) ([]byte, error) {
2018-01-23 16:40:48 +08:00
return gjson.NewJson(value).ToXml(rootTag...)
}
func VarToXmlIndent(value interface{}, rootTag...string) ([]byte, error) {
2018-01-23 16:40:48 +08:00
return gjson.NewJson(value).ToXmlIndent(rootTag...)
}
func VarToJson(value interface{}) ([]byte, error) {
2018-01-23 16:40:48 +08:00
return gjson.NewJson(value).ToJson()
}
func VarToJsonIndent(value interface{}) ([]byte, error) {
2018-01-23 16:40:48 +08:00
return gjson.NewJson(value).ToJsonIndent()
}
func VarToYaml(value interface{}) ([]byte, error) {
2018-01-23 16:40:48 +08:00
return gjson.NewJson(value).ToYaml()
}
func VarToToml(value interface{}) ([]byte, error) {
2018-01-23 16:40:48 +08:00
return gjson.NewJson(value).ToToml()
}