3 Commits

Author SHA1 Message Date
ea73b4a9b9 添加简单的test 2018-12-24 21:10:17 +08:00
98ff746add 改了gjson匹配规则. 2018-12-24 21:08:43 +08:00
ab583cb85c fix: src code error. 2018-12-24 20:03:07 +08:00
2 changed files with 30 additions and 57 deletions

View File

@@ -780,67 +780,32 @@ func parseArrayPath(path string) (r arrayPathResult) {
break
}
}
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 == "~" {
pair := path[i]
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] == ' ' {
continue
}
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) {
i = len(path)
}

View File

@@ -1434,9 +1434,17 @@ func TestArrayValues(t *testing.T) {
}
func TestEsonRegexp(t *testing.T) {
mtok := get(`{"data": [ {"dat": "123\"", "next": [{"a": "\"32"}, {"a": "32"}]}, {"dat": "234"} ] }`, `data.#[dat % "3\""].next.#[a % "\"32"]#.a`)
func TestRegexp(t *testing.T) {
mtok := get(`{"data": [ {"dat": "123\"", "next": [{"a": "\"32"}, {"a": "32"}]}, {"dat": "234"} ] }`, `data.#[dat ~ "3\""].next.#[a ~ @\"32@]#.a`)
if mtok.String() != `["\"32"]` {
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())
}
}