Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ea73b4a9b9 | |||
| 98ff746add | |||
| ab583cb85c |
75
gjson.go
75
gjson.go
@@ -780,67 +780,32 @@ func parseArrayPath(path string) (r arrayPathResult) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s = i + 1
|
s = i + 1
|
||||||
|
pair := path[i]
|
||||||
|
i++
|
||||||
|
GETREGEXPSTR:
|
||||||
|
for ; i < len(path); i++ {
|
||||||
|
if path[i] == pair {
|
||||||
|
for iend := i + 1; iend < len(path); iend++ {
|
||||||
|
|
||||||
if r.query.op == "~" {
|
if path[iend] == ' ' {
|
||||||
pair := path[i]
|
continue
|
||||||
i++
|
|
||||||
GETREGEXPSTR:
|
|
||||||
for ; i < len(path); i++ {
|
|
||||||
if path[i] == pair {
|
|
||||||
for iend := i + 1; iend < len(path); iend++ {
|
|
||||||
|
|
||||||
if path[iend] == ' ' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if path[iend] == ']' {
|
|
||||||
if iend+1 < len(path) && path[iend+1] == '#' {
|
|
||||||
r.query.all = true
|
|
||||||
}
|
|
||||||
break GETREGEXPSTR
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if path[iend] == ']' {
|
||||||
|
if iend+1 < len(path) && path[iend+1] == '#' {
|
||||||
|
r.query.all = true
|
||||||
|
}
|
||||||
|
break GETREGEXPSTR
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
|
||||||
for ; i < len(path); i++ {
|
|
||||||
if path[i] == '"' {
|
|
||||||
i++
|
|
||||||
s2 := i
|
|
||||||
for ; i < len(path); i++ {
|
|
||||||
if path[i] > '\\' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if path[i] == '"' {
|
|
||||||
// look for an escaped slash
|
|
||||||
if path[i-1] == '\\' {
|
|
||||||
n := 0
|
|
||||||
for j := i - 2; j > s2-1; j-- {
|
|
||||||
if path[j] != '\\' {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
n++
|
|
||||||
}
|
|
||||||
if n%2 == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if path[i] == ']' {
|
|
||||||
if i+1 < len(path) && path[i+1] == '#' {
|
|
||||||
r.query.all = true
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
} //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if i > len(path) {
|
if i > len(path) {
|
||||||
i = len(path)
|
i = len(path)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1434,9 +1434,17 @@ func TestArrayValues(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEsonRegexp(t *testing.T) {
|
func TestRegexp(t *testing.T) {
|
||||||
mtok := get(`{"data": [ {"dat": "123\"", "next": [{"a": "\"32"}, {"a": "32"}]}, {"dat": "234"} ] }`, `data.#[dat % "3\""].next.#[a % "\"32"]#.a`)
|
mtok := get(`{"data": [ {"dat": "123\"", "next": [{"a": "\"32"}, {"a": "32"}]}, {"dat": "234"} ] }`, `data.#[dat ~ "3\""].next.#[a ~ @\"32@]#.a`)
|
||||||
if mtok.String() != `["\"32"]` {
|
if mtok.String() != `["\"32"]` {
|
||||||
t.Fatalf("expected %v, got %v", `"32`, mtok.String())
|
t.Fatalf("expected %v, got %v", `"32`, mtok.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestChinese(t *testing.T) {
|
||||||
|
js := `{"data": [{"f":"\"广告"}, {"f": "广告"}]}`
|
||||||
|
mtok := get(js, `data.#[f=""广告"]#`)
|
||||||
|
if mtok.Array()[0].String() != `{"f":"\"广告"}` {
|
||||||
|
t.Error("error", mtok.Array())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user