Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

JSON path for Clojure

branch: master
README.md

json-path

An implementation of the JsonPath spec for Clojure.

It doesn't provide a full implementation. The following syntactic elements are supported.

  • $: Select the root of the object.
  • .: Descend to a single child.
  • ..: Recursive descent to select all children.
  • * and <name>: Select the child objects matching a name, or all immediate children when using *.
  • [<number>] and [*]: Select either a specific element of an array, or all elements of an array.
  • [?(<expr>)]: Filter to select objects that match an expression. Supports all equality operators (=, !=, <, <=, >, >=) and can use @ to refer to objects from the current object.

See test/json_path/test/json_path_test.clj for more examples.

Missing

Notable features missing from the JsonPath spec are multiple array indices ([,]),array slicing ([start:end:step]) and arbitrary script expressions ([(...)]). Also, the set of expression operators should probably be expanded.

Future Work

json-path will never support the arbitrary script expressions feature. That's just a plain bad idea.

JsonPath is missing a parent operator. This is necessary for performing cousin operations. I propose using ^ as the parent operator. It would be used anywhere that the . child operator could be used.

The supported expression operators should be expanded. And as arbitrary script expressions won't be supported, functions for operations like length should be added.

Usage

Accepts standard Clojure data structures: maps and sequences. Assumes that maps contains keywords for the child objects.

(json-path/at-path "$.foo" {:foo {:bar "Hello, world!"}})
; => {:bar "Hello, world!"}

License

Copyright (C) 2011 Giles Alexander

Distributed under the MIT License.

Something went wrong with that request. Please try again.