From 4ea8cd43986d5888fb8e809a198d6b0331b12480 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sat, 28 May 2011 14:36:43 +0100 Subject: Add initial JSONPath implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JSONPath is a JSON query syntax similar to what XPath does for XML; using JSONPath it's possible to address a specific node (or set of nodes) inside a JSON document. The JsonPath class is a simple implementation of part of the JSONPath proposal, as formalised by Stefan Gössner here: http://goessner.net/articles/JsonPath/ The covered operators are: • root, or '$'; • child, both using the dot-notation and the bracket notation; • recursive descent, or '..'; • subscript, or '[]'; • set, or '[,]'; • slice, or '[start:end:step]'. The only missing operators are the filter, or '?()' and the script, or '()', because implementing a JavaScript interpreter inside JSON-GLib is not one of my greatest aspirations. It should be possible, though, to parse and evaluate simple arithmetic conditions, in the future. The JsonPath methods are pretty straightforward: a JsonPath instance should be created and used to compile an expression; the compilation might result in a syntax error or not. Then, the JsonPath instance can be used to match any JSON tree. Like the other JSONPath implementations, JsonPath returns a JSON array of matching nodes. A simple, one-off static method called json_path_query() is also provided; the method wraps the JsonPath creation, the expression compilation, and the matching, as well as disposing the JsonPath instance once done. For the time being, only positive testing is provided; negative testing for the expression compilation will follow. --- json-glib/json-debug.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'json-glib/json-debug.h') diff --git a/json-glib/json-debug.h b/json-glib/json-debug.h index 20f22c6..695917f 100644 --- a/json-glib/json-debug.h +++ b/json-glib/json-debug.h @@ -7,7 +7,8 @@ G_BEGIN_DECLS typedef enum { JSON_DEBUG_PARSER = 1 << 0, - JSON_DEBUG_GOBJECT = 1 << 1 + JSON_DEBUG_GOBJECT = 1 << 1, + JSON_DEBUG_PATH = 1 << 2 } JsonDebugFlags; #ifdef JSON_ENABLE_DEBUG -- cgit v1.2.1