json-query

This rust crate provides programmatic access to [jq] 1.6 via its C api.

By leveraging [jq] we can extract and transform data from a json string using jq's filtering dsl.

```rust use json_query; // ...

let res = jsonquery::run(".name", r#"{"name": "test"}"#); asserteq!(res, Ok("\"test\"".to_string())); ```

The return values from the run method are json strings, and as such will need to be parsed if you want to work with the actual data types being represented. As such, you may want to pair this crate with [serde_json] or similar.

For example, here we want to extract the numbers from a set of objects:

```rust use jsonquery; use serdejson::{self, json};

// ...

let data = json!({ "movies": [ { "title": "Coraline", "year": 2009 }, { "title": "ParaNorman", "year": 2012 }, { "title": "Boxtrolls", "year": 2014 }, { "title": "Kubo and the Two Strings", "year": 2016 }, { "title": "Missing Link", "year": 2019 } ] });

let query = "[.movies[].year]"; // program output as a json string... let output = jsonquery::run(query, &data.tostring()).unwrap(); // ... parse via serde let parsed: Vec = serdejson::fromstr(&output).unwrap();

assert_eq!(vec![2009, 2012, 2014, 2016, 2019], parsed); ```

Barely any of the options or flags available from the [jq] cli are exposed currently. Literally all that is provided is the ability to execute a jq program on a blob of json. Please pardon my dust as I sort out the details.

Linking to libjq

When the bundled feature is enabled (off by default) libjq is provided and linked statically by [jq-sys] and [jq-src] which require having autotools and gcc in PATH to build.

If you disable the bundled feature, you will need to ensure your crate links to libjq in order for the bindings to work.

See the jq-sys building docs for details on how to share hints with the [jq-sys] crate on how to link.

Note that it may be required to cargo clean when switching between building with bundled enabled or disabled.

I can't explain it, but sometimes the bundled build will break if you don't give the out dir a good scrubbing.

Changelog

v0.2.0 (2019-02-18)

Breaking Changes:

v0.1.1 (2019-01-14)

v0.1.0 (2019-01-13)

Initial release.