gparse新增Remove方法,取消通过Set+nil来删除变量的方式

This commit is contained in:
John
2018-01-26 17:42:14 +08:00
parent e632ae7401
commit 03e100b4a5
3 changed files with 30 additions and 5 deletions

View File

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

View File

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