[−][src]Crate ajson
A-JSON
Ajson is a lightweight json parser that allows users to dynamically retrieve values in json using a simple syntax.
Examples
let data = r#" { "project": { "name": "ajson", "maintainer": "importcjj", "version": 0.1, "rusts": ["stable", "nightly"] } } "#; let name = ajson::get(data, "project.name").unwrap(); assert_eq!(name, "ajson");
Syntax
JSON example
{
"name": {"first": "Tom", "last": "Anderson"},
"age":37,
"children": ["Sara","Alex","Jack"],
"fav.movie": "Deer Hunter",
"friends": [
{"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
{"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
{"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
]
}
basic
Below is a quick overview of the path syntax, for more complete information please check out GJSON Syntax.
A path is a series of keys separated by a dot. A key may contain special wildcard characters '*' and '?'. To access an array value use the index as the key. To get the number of elements in an array or to access a child path, use the '#' character. The dot and wildcard characters can be escaped with ''.
name.last >> "Anderson"
age >> 37
children >> ["Sara","Alex","Jack"]
children.# >> 3
children.1 >> "Alex"
child*.2 >> "Jack"
c?ildren.0 >> "Sara"
fav\.movie >> "Deer Hunter"
friends.#.first >> ["Dale","Roger","Jane"]
friends.1.last >> "Craig"
Escape character
Special purpose characters, such as ., *, and ? can be escaped with .
fav\.movie "Deer Hunter"
Arrays
The # character allows for digging into JSON Arrays.To get the length of an array you'll just use the # all by itself.
friends.# 3
friends.#.age [44,68,47]
queries
You can also query an array for the first match by using #(...), or find all matches with #(...)#. Queries support the ==, !=, <, <=, >, >= comparison operators and the simple pattern matching % (like) and !% (not like) operators.
friends.#(last=="Murphy").first >> "Dale"
friends.#(last=="Murphy")#.first >> ["Dale","Jane"]
friends.#(age>45)#.last >> ["Craig","Murphy"]
friends.#(first%"D*").last >> "Murphy"
friends.#(nets.#(=="fb"))#.first >> ["Dale","Roger"]
construct
Basically, you can use selectors to assemble whatever you want, and of course, the result is still a json ;)
{name.first,age,"murphys":friends.#(last="Murphy")#.first}
[name.first,age,children.0]
Enums
Number | |
Value | Represents JSON valuue. |
Functions
get |
|
get_from_read | Same to |
parse | Returns the first JSON value parsed, and it may be having problems because it does not actively panic on incomplete JSON values. For example, array or map are not closed properly. |
parse_from_read | Same to |