Skip to content

A better path to data. Experimental.

Notifications You must be signed in to change notification settings

doomspork/cobblestone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cobblestone

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.

Installation

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.