Skip to content

Commit 096d783

Browse files
committed
fix: ensure filter does not match number to string
1 parent f7e9fe1 commit 096d783

9 files changed

+130
-52
lines changed

script/standard/complex_operators.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package standard
22

33
import (
4+
"fmt"
45
"regexp"
56
"strings"
67

@@ -73,5 +74,15 @@ func (op *selectorOperator) Evaluate(parameters map[string]interface{}) (interfa
7374
next = op.tokens[1:]
7475
}
7576

76-
return op.tokens[0].Apply(root, current, next)
77+
value, err := op.tokens[0].Apply(root, current, next)
78+
if err != nil {
79+
return nil, err
80+
}
81+
if strValue, ok := value.(string); ok {
82+
if len(strValue) > 1 && strings.HasPrefix(strValue, "'") && strings.HasSuffix(strValue, "'") {
83+
return strValue, nil
84+
}
85+
return fmt.Sprintf("'%s'", strValue), nil
86+
}
87+
return value, nil
7788
}

script/standard/complex_operators_test.go

+15-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func Test_selectorOperator(t *testing.T) {
115115
},
116116
},
117117
expected: operatorTestExpected{
118-
value: "value",
118+
value: "'value'",
119119
},
120120
},
121121
{
@@ -128,7 +128,20 @@ func Test_selectorOperator(t *testing.T) {
128128
},
129129
},
130130
expected: operatorTestExpected{
131-
value: "this",
131+
value: "'this'",
132+
},
133+
},
134+
{
135+
input: operatorTestInput{
136+
operator: currentKeyOperator,
137+
paramters: map[string]interface{}{
138+
"@": map[string]interface{}{
139+
"key": true,
140+
},
141+
},
142+
},
143+
expected: operatorTestExpected{
144+
value: true,
132145
},
133146
},
134147
}

script/standard/logic_operators_test.go

+34
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,8 @@ func Test_greaterThanOrEqualOperator(t *testing.T) {
336336
}
337337

338338
func Test_equalsOperator(t *testing.T) {
339+
currentKeySelector, _ := newSelectorOperator("@.key", &ScriptEngine{}, nil)
340+
339341
tests := []*operatorTest{
340342
{
341343
input: operatorTestInput{
@@ -403,6 +405,38 @@ func Test_equalsOperator(t *testing.T) {
403405
value: true,
404406
},
405407
},
408+
{
409+
input: operatorTestInput{
410+
operator: &equalsOperator{
411+
arg1: currentKeySelector,
412+
arg2: "true",
413+
},
414+
paramters: map[string]interface{}{
415+
"@": map[string]interface{}{
416+
"key": true,
417+
},
418+
},
419+
},
420+
expected: operatorTestExpected{
421+
value: true,
422+
},
423+
},
424+
{
425+
input: operatorTestInput{
426+
operator: &equalsOperator{
427+
arg1: currentKeySelector,
428+
arg2: "true",
429+
},
430+
paramters: map[string]interface{}{
431+
"@": map[string]interface{}{
432+
"key": "true",
433+
},
434+
},
435+
},
436+
expected: operatorTestExpected{
437+
value: false,
438+
},
439+
},
406440
}
407441
batchOperatorTests(t, tests)
408442
}

script/standard/operators.go

+20-11
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,30 @@ func getString(argument interface{}, parameters map[string]interface{}) (string,
120120
if str, ok := argument.(string); ok {
121121
if arg, ok := parameters[str]; ok {
122122
argument = arg
123-
if str, ok := arg.(string); ok {
124-
return str, nil
123+
if parsed, ok := arg.(string); ok {
124+
str = parsed
125+
126+
if len(str) > 1 {
127+
if strings.HasPrefix(str, "'") && strings.HasSuffix(str, "'") {
128+
return str, nil
129+
} else if strings.HasPrefix(str, `"`) && strings.HasSuffix(str, `"`) {
130+
str = str[1 : len(str)-1]
131+
}
132+
}
133+
return fmt.Sprintf("'%s'", str), nil
125134
}
126-
} else if len(str) > 1 {
127-
if strings.HasPrefix(str, "'") && strings.HasSuffix(str, "'") {
128-
return str[1 : len(str)-1], nil
129-
} else if strings.HasPrefix(str, `"`) && strings.HasSuffix(str, `"`) {
130-
return str[1 : len(str)-1], nil
135+
} else {
136+
if len(str) > 1 {
137+
if strings.HasPrefix(str, "'") && strings.HasSuffix(str, "'") {
138+
return str, nil
139+
} else if strings.HasPrefix(str, `"`) && strings.HasSuffix(str, `"`) {
140+
str = str[1 : len(str)-1]
141+
return fmt.Sprintf("'%s'", str), nil
142+
}
131143
}
144+
return str, nil
132145
}
133-
134-
return str, nil
135146
}
136147

137-
// TODO: need to handle quotes
138-
139148
return fmt.Sprintf("%v", argument), nil
140149
}

script/standard/operators_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -331,15 +331,15 @@ func Test_getString(t *testing.T) {
331331
argument: "'single quotes'",
332332
},
333333
expected: expected{
334-
value: "single quotes",
334+
value: "'single quotes'",
335335
},
336336
},
337337
{
338338
input: input{
339339
argument: `"double quotes"`,
340340
},
341341
expected: expected{
342-
value: "double quotes",
342+
value: "'double quotes'",
343343
},
344344
},
345345
{
@@ -350,7 +350,7 @@ func Test_getString(t *testing.T) {
350350
},
351351
},
352352
expected: expected{
353-
value: "value",
353+
value: "'value'",
354354
},
355355
},
356356
{

script/standard/standard.go

+7
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,13 @@ func (compiled *compiledExpression) Evaluate(root, current interface{}) (interfa
237237
if val, ok := parameters[expression]; ok {
238238
return val, nil
239239
}
240+
241+
if number, err := getNumber(expression, parameters); err == nil {
242+
return number, nil
243+
} else if boolean, err := getBoolean(expression, parameters); err == nil {
244+
return boolean, nil
245+
}
246+
240247
return expression, nil
241248
}
242249

script/standard/standard_test.go

+14-2
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,18 @@ func Test_ScriptEngine_buildOperators(t *testing.T) {
425425
},
426426
},
427427
},
428+
{
429+
input: input{
430+
expression: "@.key==true",
431+
tokens: defaultTokens,
432+
},
433+
expected: expected{
434+
operator: &equalsOperator{
435+
arg1: currentKey,
436+
arg2: "true",
437+
},
438+
},
439+
},
428440
}
429441

430442
for idx, test := range tests {
@@ -494,7 +506,7 @@ func Test_ScriptEngine_Evaluate(t *testing.T) {
494506
expression: "$",
495507
},
496508
expected: expected{
497-
value: "root",
509+
value: "'root'",
498510
},
499511
},
500512
{
@@ -504,7 +516,7 @@ func Test_ScriptEngine_Evaluate(t *testing.T) {
504516
expression: "@",
505517
},
506518
expected: expected{
507-
value: "current",
519+
value: "'current'",
508520
},
509521
},
510522
{

test/README.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -187,23 +187,23 @@ This implementation would be closer to the 'Scalar consensus' as it does not alw
187187
|:question:|`$[?(@.2 == 'second')]`|`[{"a": "first", "2": "second", "b": "third"}]`|none|`[{"2":"second","a":"first","b":"third"}]`|
188188
|:question:|`$[?(@.2 == 'third')]`|`[["first", "second", "third", "forth", "fifth"]] `|none|`[]`|
189189
|:white_check_mark:|`$[?()]`|`[1, {"key": 42}, "value", null]`|`nil`|`null`|
190-
|:question:|`$[?(@.key==42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "some"}, {"key": "42"}, {"key": null}, {"key": 420}, {"key": ""}, {"key": {}}, {"key": []}, {"key": [42]}, {"key": {"key": 42}}, {"key": {"some": 42}}, {"some": "value"} ]`|none|`[{"key":42},{"key":"42"}]`|
190+
|:question:|`$[?(@.key==42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "some"}, {"key": "42"}, {"key": null}, {"key": 420}, {"key": ""}, {"key": {}}, {"key": []}, {"key": [42]}, {"key": {"key": 42}}, {"key": {"some": 42}}, {"some": "value"} ]`|none|`[{"key":42}]`|
191191
|:white_check_mark:|`$[?(@==42)]`|`[ 0, 42, -1, 41, 43, 42.0001, 41.9999, null, 100 ]`|`[42]`|`[42]`|
192192
|:white_check_mark:|`$[?(@.key==43)]`|`[{"key": 42}]`|`[]`|`[]`|
193193
|:question:|`$[?(@.key==42)]`|`{ "a": {"key": 0}, "b": {"key": 42}, "c": {"key": -1}, "d": {"key": 41}, "e": {"key": 43}, "f": {"key": 42.0001}, "g": {"key": 41.9999}, "h": {"key": 100}, "i": {"some": "value"} }`|none|`[{"key":42}]`|
194194
|:question:|`$[?(@.id==2)]`|`{"id": 2}`|none|`[]`|
195195
|:question:|`$[?(@.d==["v1","v2"])]`|`[ { "d": [ "v1", "v2" ] }, { "d": [ "a", "b" ] }, { "d": "v1" }, { "d": "v2" }, { "d": {} }, { "d": [] }, { "d": null }, { "d": -1 }, { "d": 0 }, { "d": 1 }, { "d": "['v1','v2']" }, { "d": "['v1', 'v2']" }, { "d": "v1,v2" }, { "d": "[\"v1\", \"v2\"]" }, { "d": "[\"v1\",\"v2\"]" } ]`|none|`[{"d":["v1","v2"]}]`|
196196
|:question:|`$[?(@[0:1]==[1])]`|`[[1, 2, 3], [1], [2, 3], 1, 2]`|none|`[[1,2,3],[1]]`|
197197
|:question:|`$[?(@.*==[1,2])]`|`[[1,2], [2,3], [1], [2], [1, 2, 3], 1, 2, 3]`|none|`[[1,2]]`|
198-
|:question:|`$[?(@.d==['v1','v2'])]`|`[ { "d": [ "v1", "v2" ] }, { "d": [ "a", "b" ] }, { "d": "v1" }, { "d": "v2" }, { "d": {} }, { "d": [] }, { "d": null }, { "d": -1 }, { "d": 0 }, { "d": 1 }, { "d": "['v1','v2']" }, { "d": "['v1', 'v2']" }, { "d": "v1,v2" }, { "d": "[\"v1\", \"v2\"]" }, { "d": "[\"v1\",\"v2\"]" } ]`|none|`[{"d":"['v1','v2']"}]`|
198+
|:question:|`$[?(@.d==['v1','v2'])]`|`[ { "d": [ "v1", "v2" ] }, { "d": [ "a", "b" ] }, { "d": "v1" }, { "d": "v2" }, { "d": {} }, { "d": [] }, { "d": null }, { "d": -1 }, { "d": 0 }, { "d": 1 }, { "d": "['v1','v2']" }, { "d": "['v1', 'v2']" }, { "d": "v1,v2" }, { "d": "[\"v1\", \"v2\"]" }, { "d": "[\"v1\",\"v2\"]" } ]`|none|`[]`|
199199
|:question:|`$[?((@.key<44)==false)]`|`[{"key": 42}, {"key": 43}, {"key": 44}]`|none|`[{"key":44}]`|
200200
|:question:|`$[?(@.key==false)]`|`[ { "some": "some value" }, { "key": true }, { "key": false }, { "key": null }, { "key": "value" }, { "key": "" }, { "key": 0 }, { "key": 1 }, { "key": -1 }, { "key": 42 }, { "key": {} }, { "key": [] } ]`|none|`[{"key":false}]`|
201-
|:question:|`$[?(@.key==null)]`|`[ { "some": "some value" }, { "key": true }, { "key": false }, { "key": null }, { "key": "value" }, { "key": "" }, { "key": 0 }, { "key": 1 }, { "key": -1 }, { "key": 42 }, { "key": {} }, { "key": [] } ]`|none|`[]`|
201+
|:question:|`$[?(@.key==null)]`|`[ { "some": "some value" }, { "key": true }, { "key": false }, { "key": null }, { "key": "value" }, { "key": "" }, { "key": 0 }, { "key": 1 }, { "key": -1 }, { "key": 42 }, { "key": {} }, { "key": [] } ]`|none|`[{"key":null}]`|
202202
|:question:|`$[?(@[0:1]==1)]`|`[[1, 2, 3], [1], [2, 3], 1, 2]`|none|`[]`|
203203
|:question:|`$[?(@[*]==2)]`|`[[1,2], [2,3], [1], [2], [1, 2, 3], 1, 2, 3]`|none|`[]`|
204204
|:question:|`$[?(@.*==2)]`|`[[1,2], [2,3], [1], [2], [1, 2, 3], 1, 2, 3]`|none|`[]`|
205-
|:question:|`$[?(@.key==-0.123e2)]`|`[{"key": -12.3}, {"key": -0.123}, {"key": -12}, {"key": 12.3}, {"key": 2}, {"key": "-0.123e2"}]`|none|`[{"key":-12.3},{"key":"-0.123e2"}]`|
206-
|:question:|`$[?(@.key==010)]`|`[{"key": "010"}, {"key": "10"}, {"key": 10}, {"key": 0}, {"key": 8}]`|none|`[{"key":"010"},{"key":"10"},{"key":10}]`|
205+
|:question:|`$[?(@.key==-0.123e2)]`|`[{"key": -12.3}, {"key": -0.123}, {"key": -12}, {"key": 12.3}, {"key": 2}, {"key": "-0.123e2"}]`|none|`[{"key":-12.3}]`|
206+
|:question:|`$[?(@.key==010)]`|`[{"key": "010"}, {"key": "10"}, {"key": 10}, {"key": 0}, {"key": 8}]`|none|`[{"key":10}]`|
207207
|:question:|`$[?(@.d=={"k":"v"})]`|`[ { "d": { "k": "v" } }, { "d": { "a": "b" } }, { "d": "k" }, { "d": "v" }, { "d": {} }, { "d": [] }, { "d": null }, { "d": -1 }, { "d": 0 }, { "d": 1 }, { "d": "[object Object]" }, { "d": "{\"k\": \"v\"}" }, { "d": "{\"k\":\"v\"}" }, "v" ]`|none|`[{"d":{"k":"v"}}]`|
208208
|:white_check_mark:|`$[?(@.key=="value")]`|`[ {"key": "some"}, {"key": "value"}, {"key": null}, {"key": 0}, {"key": 1}, {"key": -1}, {"key": ""}, {"key": {}}, {"key": []}, {"key": "valuemore"}, {"key": "morevalue"}, {"key": ["value"]}, {"key": {"some": "value"}}, {"key": {"key": "value"}}, {"some": "value"} ]`|`[{"key":"value"}]`|`[{"key":"value"}]`|
209209
|:white_check_mark:|`$[?(@.key=="Motörhead")]`|`[ {"key": "something"}, {"key": "Mot\u00f6rhead"}, {"key": "mot\u00f6rhead"}, {"key": "Motorhead"}, {"key": "Motoo\u0308rhead"}, {"key": "motoo\u0308rhead"} ]`|`[{"key":"Motörhead"}]`|`[{"key":"Motörhead"}]`|
@@ -214,17 +214,17 @@ This implementation would be closer to the 'Scalar consensus' as it does not alw
214214
|:question:|`$[?(@.key==true)]`|`[ { "some": "some value" }, { "key": true }, { "key": false }, { "key": null }, { "key": "value" }, { "key": "" }, { "key": 0 }, { "key": 1 }, { "key": -1 }, { "key": 42 }, { "key": {} }, { "key": [] } ]`|none|`[{"key":true}]`|
215215
|:question:|`$[?(@[email protected])]`|`[ {"key1": 10, "key2": 10}, {"key1": 42, "key2": 50}, {"key1": 10}, {"key2": 10}, {}, {"key1": null, "key2": null}, {"key1": null}, {"key2": null}, {"key1": 0, "key2": 0}, {"key1": 0}, {"key2": 0}, {"key1": -1, "key2": -1}, {"key1": "", "key2": ""}, {"key1": false, "key2": false}, {"key1": false}, {"key2": false}, {"key1": true, "key2": true}, {"key1": [], "key2": []}, {"key1": {}, "key2": {}}, {"key1": {"a": 1, "b": 2}, "key2": {"b": 2, "a": 1}} ]`|none|`[{"key1":10,"key2":10},{"key1":null,"key2":null},{"key1":0,"key2":0},{"key1":-1,"key2":-1},{"key1":"","key2":""},{"key1":false,"key2":false},{"key1":true,"key2":true},{"key1":[],"key2":[]},{"key1":{},"key2":{}},{"key1":{"a":1,"b":2},"key2":{"a":1,"b":2}}]`|
216216
|:question:|`$.items[?(@.key==$.value)]`|`{"value": 42, "items": [{"key": 10}, {"key": 42}, {"key": 50}]}`|none|`[{"key":42}]`|
217-
|:question:|`$[?(@.key>42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":43},{"key":42.0001},{"key":100},{"key":"43"}]`|
218-
|:question:|`$[?(@.key>=42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":42},{"key":43},{"key":42.0001},{"key":100},{"key":"43"},{"key":"42"}]`|
217+
|:question:|`$[?(@.key>42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":43},{"key":42.0001},{"key":100}]`|
218+
|:question:|`$[?(@.key>=42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":42},{"key":43},{"key":42.0001},{"key":100}]`|
219219
|:no_entry:|`$[?(@.d in [2, 3])]`|`[{"d": 1}, {"d": 2}, {"d": 1}, {"d": 3}, {"d": 4}]`|`nil`|`[]`|
220220
|:white_check_mark:|`$[?(2 in @.d)]`|`[{"d": [1, 2, 3]}, {"d": [2]}, {"d": [1]}, {"d": [3, 4]}, {"d": [4, 2]}]`|`nil`|`null`|
221-
|:question:|`$[?(@.key<42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":0},{"key":-1},{"key":41},{"key":41.9999},{"key":"41"}]`|
222-
|:question:|`$[?(@.key<=42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":0},{"key":42},{"key":-1},{"key":41},{"key":41.9999},{"key":"42"},{"key":"41"}]`|
221+
|:question:|`$[?(@.key<42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":0},{"key":-1},{"key":41},{"key":41.9999}]`|
222+
|:question:|`$[?(@.key<=42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":0},{"key":42},{"key":-1},{"key":41},{"key":41.9999}]`|
223223
|:question:|`$[?(@.key*2==100)]`|`[{"key": 60}, {"key": 50}, {"key": 10}, {"key": -50}, {"key*2": 100}]`|none|`[{"key":50}]`|
224224
|:question:|`$[?(!(@.key==42))]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":0},{"key":42},{"key":-1},{"key":41},{"key":43},{"key":42.0001},{"key":41.9999},{"key":100},{"key":"43"},{"key":"42"},{"key":"41"},{"key":"value"},{"some":"value"}]`|
225225
|:question:|`$[?(!(@.key<42))]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "43"}, {"key": "42"}, {"key": "41"}, {"key": "value"}, {"some": "value"} ]`|none|`[{"key":0},{"key":42},{"key":-1},{"key":41},{"key":43},{"key":42.0001},{"key":41.9999},{"key":100},{"key":"43"},{"key":"42"},{"key":"41"},{"key":"value"},{"some":"value"}]`|
226226
|:question:|`$[?([email protected])]`|`[ { "some": "some value" }, { "key": true }, { "key": false }, { "key": null }, { "key": "value" }, { "key": "" }, { "key": 0 }, { "key": 1 }, { "key": -1 }, { "key": 42 }, { "key": {} }, { "key": [] } ]`|none|`null`|
227-
|:question:|`$[?(@.key!=42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "some"}, {"key": "42"}, {"key": null}, {"key": 420}, {"key": ""}, {"key": {}}, {"key": []}, {"key": [42]}, {"key": {"key": 42}}, {"key": {"some": 42}}, {"some": "value"} ]`|none|`[{"key":0},{"key":-1},{"key":1},{"key":41},{"key":43},{"key":42.0001},{"key":41.9999},{"key":100},{"key":"some"},{"key":null},{"key":420},{"key":""},{"key":{}},{"key":[]},{"key":[42]},{"key":{"key":42}},{"key":{"some":42}}]`|
227+
|:question:|`$[?(@.key!=42)]`|`[ {"key": 0}, {"key": 42}, {"key": -1}, {"key": 1}, {"key": 41}, {"key": 43}, {"key": 42.0001}, {"key": 41.9999}, {"key": 100}, {"key": "some"}, {"key": "42"}, {"key": null}, {"key": 420}, {"key": ""}, {"key": {}}, {"key": []}, {"key": [42]}, {"key": {"key": 42}}, {"key": {"some": 42}}, {"some": "value"} ]`|none|`[{"key":0},{"key":-1},{"key":1},{"key":41},{"key":43},{"key":42.0001},{"key":41.9999},{"key":100},{"key":"some"},{"key":"42"},{"key":null},{"key":420},{"key":""},{"key":{}},{"key":[]},{"key":[42]},{"key":{"key":42}},{"key":{"some":42}}]`|
228228
|:no_entry:|`$[*].bookmarks[?(@.page == 45)]^^^`|`[ { "title": "Sayings of the Century", "bookmarks": [{ "page": 40 }] }, { "title": "Sword of Honour", "bookmarks": [ { "page": 35 }, { "page": 45 } ] }, { "title": "Moby Dick", "bookmarks": [ { "page": 3035 }, { "page": 45 } ] } ]`|`nil`|`[[],[],[]]`|
229229
|:question:|`$[?(@.name=~/hello.*/)]`|`[ {"name": "hullo world"}, {"name": "hello world"}, {"name": "yes hello world"}, {"name": "HELLO WORLD"}, {"name": "good bye"} ]`|none|`[]`|
230230
|:question:|`$[?(@.name=~/@.pattern/)]`|`[ {"name": "hullo world"}, {"name": "hello world"}, {"name": "yes hello world"}, {"name": "HELLO WORLD"}, {"name": "good bye"}, {"pattern": "hello.*"} ]`|none|`null`|
@@ -239,7 +239,7 @@ This implementation would be closer to the 'Scalar consensus' as it does not alw
239239
|:question:|`$[?(@.key)]`|`[ { "some": "some value" }, { "key": true }, { "key": false }, { "key": null }, { "key": "value" }, { "key": "" }, { "key": 0 }, { "key": 1 }, { "key": -1 }, { "key": 42 }, { "key": {} }, { "key": [] } ]`|none|`[{"key":true},{"key":"value"},{"key":1},{"key":-1},{"key":42}]`|
240240
|:question:|`$.*[?(@.key)]`|`[ { "some": "some value" }, { "key": "value" } ]`|none|`[[],[]]`|
241241
|:question:|`$..[?(@.id)]`|`{"id": 2, "more": [{"id": 2}, {"more": {"id": 2}}, {"id": {"id": 2}}, [{"id": 2}]]}`|none|`[{"id":2},{"id":{"id":2}},{"id":2},{"id":2},{"id":2}]`|
242-
|:question:|`$[?(false)]`|`[1, 3, "nice", true, null, false, {}, [], -1, 0, ""]`|none|`[1,3,"nice",true,null,false,{},[],-1,0,""]`|
242+
|:question:|`$[?(false)]`|`[1, 3, "nice", true, null, false, {}, [], -1, 0, ""]`|none|`[]`|
243243
|:question:|`$[?(@..child)]`|`[{"key": [{"child": 1}, {"child": 2}]}, {"key": [{"child": 2}]}, {"key": [{}]}, {"key": [{"something": 42}]}, {}]`|none|`[{"key":[{"child":1},{"child":2}]},{"key":[{"child":2}]}]`|
244244
|:question:|`$[?(null)]`|`[1, 3, "nice", true, null, false, {}, [], -1, 0, ""]`|none|`[]`|
245245
|:question:|`$[?(true)]`|`[1, 3, "nice", true, null, false, {}, [], -1, 0, ""]`|none|`[1,3,"nice",true,null,false,{},[],-1,0,""]`|

0 commit comments

Comments
 (0)