jsonpath-rust 0.1.4

The library provides the basic functionality to find the set of the data according to the filtering query.
Documentation
WHITESPACE = _{ " " | "\t" | "\r\n" | "\n"}

min = _{"-"}
col = _{":"}
dot =  _{ "." }
word = _{ ('a'..'z' | 'A'..'Z')+ }
specs = _{ "_" | "-" | "/" | "\\" | "#" }
number = @{"-"? ~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*) ~ ("." ~ ASCII_DIGIT+)? ~ (^"e" ~ ("+" | "-")? ~ ASCII_DIGIT+)?}

string_qt = ${ "\'" ~ inner ~ "\'" }
inner = @{ char* }
char = _{
    !("\"" | "\\" | "\'") ~ ANY
    | "\\" ~ ("\"" | "\'" |  "\\" | "/" | "b" | "f" | "n" | "r" | "t")
    | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
}
root = {"$"}
sign = { "==" | "!=" | "~=" | ">=" | ">" | "<=" | "<" | "in" | "nin" | "size" | "noneOf" | "anyOf" | "subsetOf"}

key_lim = {(word | ASCII_DIGIT | specs)+}
key_unlim = {"[" ~ string_qt ~ "]"}
key = ${key_lim | key_unlim}

descent = {dot ~ dot ~ key}
wildcard = {dot? ~ "[" ~"*"~"]" | dot ~ "*"}
current = {"@" ~ chain?}
field = ${dot? ~ key_unlim | dot ~ key_lim }

unsigned = {("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)}
signed = {min? ~ unsigned}
start_slice = {signed}
end_slice = {signed}
step_slice = {col ~ unsigned}
slice = {start_slice? ~ col ~ end_slice? ~ step_slice? }

unit_keys = { string_qt ~ ("," ~ string_qt)+ }
unit_indexes = { number ~ ("," ~ number)+  }
filter = {"?"~ "(" ~ op ~ (sign ~ op)? ~ ")"}
op = _{chain | string_qt | number}

index = {"["~ (unit_keys | unit_indexes | slice | unsigned |filter ) ~ "]" }

chain = {(root | descent | wildcard | current | field | index)+}

path = {SOI ~ chain ~ EOI }