代码拉取完成,页面将自动刷新
package jsonvalue
import (
"fmt"
"strings"
)
func (v *V) delFromObjectChildren(caseless bool, key string) (exist bool) {
_, exist = v.children.object[key]
if exist {
delete(v.children.object, key)
v.delCaselessKey(key)
return true
}
if !caseless {
return false
}
v.initCaselessStorage()
lowerKey := strings.ToLower(key)
keys, exist := v.children.lowerCaseKeys[lowerKey]
if !exist {
return false
}
for actualKey := range keys {
_, exist = v.children.object[actualKey]
if exist {
delete(v.children.object, actualKey)
v.delCaselessKey(actualKey)
return true
}
}
return false
}
// Delete deletes specified JSON value. Forexample, parameters ("data", "list") identifies deleting value in data.list.
// While ("list", 1) means deleting 2nd (count from one) element from the "list" array.
//
// Delete 从 JSON 中删除参数指定的对象。比如参数 ("data", "list") 表示删除 data.list 值;参数 ("list", 1) 则表示删除 list
// 数组的第2(从1算起)个值。
func (v *V) Delete(firstParam interface{}, otherParams ...interface{}) error {
return v.delete(false, firstParam, otherParams...)
}
func (v *V) delete(caseless bool, firstParam interface{}, otherParams ...interface{}) error {
paramCount := len(otherParams)
if paramCount == 0 {
return v.deleteInCurrValue(caseless, firstParam)
}
child, err := v.get(caseless, firstParam, otherParams[:paramCount-1]...)
if err != nil {
return err
}
// if child == nil {
// return ErrNotFound
// }
return child.delete(caseless, otherParams[paramCount-1])
}
func (v *V) deleteInCurrValue(caseless bool, param interface{}) error {
if v.valueType == Object {
// string expected
key, err := intfToString(param)
if err != nil {
return err
}
if exist := v.delFromObjectChildren(caseless, key); !exist {
return ErrNotFound
}
return nil
}
if v.valueType == Array {
// interger expected
pos, err := intfToInt(param)
if err != nil {
return err
}
pos = v.posAtIndexForRead(pos)
if pos < 0 {
return ErrOutOfRange
}
v.deleteInArr(pos)
return nil
}
// else, this is an object value
return fmt.Errorf("%v type does not supports Delete()", v.valueType)
}
func (v *V) deleteInArr(pos int) {
le := len(v.children.arr)
v.children.arr[pos] = nil
copy(v.children.arr[pos:], v.children.arr[pos+1:])
v.children.arr = v.children.arr[:le-1]
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。