mirror of
https://gitee.com/johng/gf
synced 2026-06-07 10:22:11 +08:00
gparse新增Remove方法,取消通过Set+nil来删除变量的方式
This commit is contained in:
@ -187,12 +187,22 @@ func (j *Json) GetFloat64(pattern string) float64 {
|
||||
return gconv.Float64(j.Get(pattern))
|
||||
}
|
||||
|
||||
// 动态设置层级变量
|
||||
func (j *Json) Set(pattern string, value interface{}) error {
|
||||
return j.setValue(pattern, value, false)
|
||||
}
|
||||
|
||||
// 动态删除层级变量
|
||||
func (j *Json) Remove(pattern string) error {
|
||||
return j.setValue(pattern, nil, true)
|
||||
}
|
||||
|
||||
// 根据pattern查找并设置数据
|
||||
// 注意:
|
||||
// 1、写入的时候"."符号只能表示层级,不能使用带"."符号的键名;
|
||||
// 2、写入的value为nil时,表示删除;
|
||||
// 2、写入的value为nil且removed为true时,表示删除;
|
||||
// 3、里面的层级处理比较复杂,逻辑较复杂的地方在于层级检索及节点创建,叶子赋值;
|
||||
func (j *Json) Set(pattern string, value interface{}) error {
|
||||
func (j *Json) setValue(pattern string, value interface{}, removed bool) error {
|
||||
// 初始化判断
|
||||
if *j.p == nil {
|
||||
if isNumeric(pattern) {
|
||||
@ -206,7 +216,6 @@ func (j *Json) Set(pattern string, value interface{}) error {
|
||||
|
||||
pointer = j.p
|
||||
pparent = nil
|
||||
removed := false
|
||||
value = j.convertValue(value)
|
||||
array := strings.Split(pattern, ".")
|
||||
length := len(array)
|
||||
|
||||
@ -89,6 +89,11 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user