A better path to data
Experimental. Exploring leex, yecc, and data access.
Inspired by jq, JSONPath, and XPath.
%{
"store" => %{
"book" => [
%{
"category" => "reference",
"author" => "Nigel Rees",
"title" => "Sayings of the Century",
"price" => 8.95
},
%{
"category" => "fiction",
"author" => "Evelyn Waugh",
"title" => "Sword of Honour",
"price" => 12.99
},
%{
"category" => "fiction",
"author" => "Herman Melville",
"title" => "Moby Dick",
"isbn" => "0-553-21311-3",
"price" => 8.99
},
%{
"category" => "fiction",
"author" => "J. R. R. Tolkien",
"title" => "The Lord of the Rings",
"isbn" => "0-395-19395-8",
"price" => 22.99
}
],
"bicycle" => %{
"color" => "red",
"price" => 19.95
}
}
}
XPath | JSONPath | Cobblestone | Result |
---|---|---|---|
/store/book/author | $.store.book[*].author | .store.book[].author | the authors of all books in the store |
//author | $..author | ..author | all authors |
/store/* | $.store.* | .store | all things in store, which are some books and a red bicycle |
/store//price | $.store..price | .store..price | the price of everything in the store. |
//book[3] | $..book[2] | ..book[2] | the third book |
//book[last()] | $..book[(@.length-1)] $..book[-1:] |
..book[-1] | the last book in order. |
//book[position()<3] | $..book[0,1] $..book[:2] |
..book[0,1] .store.book[:2] |
the first two books |
//book[isbn] | $..book[?(@.isbn)] | ..book[isbn] | filter all books with isbn number |
//book[price<10] | $..book[?(@.price<10)] | ..book[price<10] | filter all books cheapier than 10 |
//* | $..* | . | all Elements in structure. |
If available in Hex, the package can be installed
by adding cobblestone
to your list of dependencies in mix.exs
:
def deps do
[
{:cobblestone, "~> 0.1.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/cobblestone.