We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
2 parents fda8192 + 2b2103c commit 5096fddCopy full SHA for 5096fdd
2 files changed
parser.go
@@ -52,6 +52,9 @@ func findTokenStart(data []byte, token byte) int {
52
func findKeyStart(data []byte, key string) (int, error) {
53
i := 0
54
ln := len(data)
55
+ if ln > 0 && (data[0] == '{' || data[0] == '[') {
56
+ i = 1
57
+ }
58
var stackbuf [unescapeStackBufSize]byte // stack-allocated array for allocation-free unescaping of small strings
59
60
if ku, err := Unescape(StringToBytes(key), stackbuf[:]); err == nil {
@@ -94,6 +97,10 @@ func findKeyStart(data []byte, key string) (int, error) {
94
97
return keyBegin - 1, nil
95
98
}
96
99
100
+ case '[':
101
+ i = blockEnd(data[i:], data[i], ']') + i
102
+ case '{':
103
+ i = blockEnd(data[i:], data[i], '}') + i
104
105
i++
106
parser_test.go
@@ -143,6 +143,30 @@ var deleteTests = []DeleteTest{
143
path: []string{"b"},
144
data: `{"a":}`,
145
},
146
+ {
147
+ desc: "Delete object without inner array",
148
+ json: `{"a": {"b": 1}, "b": 2}`,
149
+ path: []string{"b"},
150
+ data: `{"a": {"b": 1}}`,
151
+ },
152
153
154
+ json: `{"a": [{"b": 1}], "b": 2}`,
155
156
+ data: `{"a": [{"b": 1}]}`,
157
158
159
160
+ json: `{"a": {"c": {"b": 3}, "b": 1}, "b": 2}`,
161
+ path: []string{"a", "b"},
162
+ data: `{"a": {"c": {"b": 3}}, "b": 2}`,
163
164
165
166
+ json: `{"a": [{"c": {"b": 3}, "b": 1}], "b": 2}`,
167
+ path: []string{"a", "[0]", "b"},
168
+ data: `{"a": [{"c": {"b": 3}}], "b": 2}`,
169
170
171
172
var setTests = []SetTest{
0 commit comments