JQ is short for Jamshed Qureshi ---- [http://stedolan.github.io/jq/manual/%|%jq] is also a command-line tool for *nix and Windows for manipulation [JSON] data. [dbohdan] 2015-01-29: You can use `jq` from Tcl, which can be faster than using [Tcllib JSON] when you only need a few values from a large JSON blob. It understands complex queries (called "filters") from `.weather[0].description` to `[paths | map(tostring) | join("/")] | unique` to the one defined in the module below. What follows is a small [Tcl Modules%|%Tcl module] to run `jq` that works in Tcl 8.5+ and [Jim Tcl]. Note that `::jq::2dict` is generally ''slower'' than `::json::json2dict` (37 vs. 21 seconds to process a 10 MiB JSON file in Tcl 8.6.3). It is provided for the convenience of not having to import another package as well as when you want a) your JSON arrays to be converted to dicts with number keys; b) a faster JSON parser in Jim Tcl than the recursive one from [jimhttp]. b) means that you can access data converted from JSON with `[dict get] $jsonDict key1 0 key2`. ====== # jq-0.2.1.tm namespace eval jq { proc jq {filter data {options {-r}}} { exec jq {*}$options $filter << $data } proc 2dict {data} { jq { def totcl: if type == "array" then # Convert array to object with keys 0, 1, 2... and process # it as object. [range(0;length) as $i | {key: $i | tostring, value: .[$i]}] | from_entries | totcl elif type == "object" then . | to_entries | map("{\(.key)} {\(.value | totcl)}") | join(" ") else tostring | split("{") | join ("\\{") | split("}") | join ("\\}") end; . | totcl } $data } } ====== [dbohdan]: I hope Jamshed doesn't mind me using this page. If he objects I will create a separate page for `jq` the program. <> Person | JSON