-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathinter_delete.go
executable file
·54 lines (53 loc) · 1.08 KB
/
inter_delete.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package jin
// Delete can delete any key-value pair, array value, array, object.
// Path value must be provided,
// otherwise it will provide an error message.
func Delete(json []byte, path ...string) ([]byte, error) {
lenp := len(path)
if lenp == 0 {
return json, errNullPath()
}
ks, s, e, err := core(json, false, path...)
if err != nil {
return json, err
}
start := 0
if ks == -1 {
start = s
} else {
start = ks - 1
}
if json[start-1] == 34 {
start--
}
if json[e] == 34 {
e++
}
var startEdge int
var endEdge int
for i := start - 1; i > 0; i-- {
if !space(json[i]) {
startEdge = i
break
}
}
for i := e; i < len(json); i++ {
if !space(json[i]) {
endEdge = i
break
}
}
if (json[startEdge] == 91 || json[startEdge] == 123) && json[startEdge]+2 == json[endEdge] {
json = replace(json, []byte{}, start, e)
return json, nil
}
if json[endEdge] == 44 {
json = replace(json, []byte{}, start, endEdge+1)
return json, nil
}
if json[startEdge] == 44 {
json = replace(json, []byte{}, startEdge, e)
return json, nil
}
return json, errBadJSON(start)
}