A small command-line tool to walk through the depth levels of a json objects
output json | jd <PATH>=. <DEPTH>=0
Working with super deep json objects from the terminal is a pain, unless you use a good json parser.
jq is an awesome one, but doesn't handle object depths, afaik.
Here the idea is to walk through a json object as you would read a summary: level by level.
npm install -g jsondepthreal world example:
url='https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1&format=json'
curl -s "$url" | jsondepthlogs the object with only the first-level keys and values:
{ entities: [Object], success: 1 }for the sake of convenience and lazyness, jsondepth is aliased to jd
(which, purposedly make it look a bit like jq)
curl -s "$url" | jd
this is equivalent to the two previous one:
curl -s "$url" | jd 0
now let's go one-level deeper:
curl -s "$url" | jd 1outputs:
{ entities: { Q1: [Object] }, success: 1 }curl -s "$url" | jd 2
curl -s "$url" | jd 3
curl -s "$url" | jd 4
# etcIf you use [paths](#specify-a-path), you may wish to disable object wrapping: this can be done by passing `-1`. The advantage is that you are sure to get back a valid json object.
curl -s "$url" | jd -1curl -s "$url" | jd entities.Q1.aliases.fi.1
# or to mimick jq syntax
curl -s "$url" | jd .entities.Q1.aliases.fi.1
# or with keys with spaces
curl -s "$url" | jd .entities.Q1.['a key with spaces']if both a path and a depth are specified, path should come first, depth second
curl -s "$url" | jd entities.Q1.claims.P31.0 3curl -s "$url" | jd entities.Q1.aliases.en.length
# => 5apply Object.keys to the final object
curl -s "$url" | jd entities._keys
# => ['Q1']apply _.values to an array
curl -s "$url" | jd entities._values
# => [{ id: 'Q1', etc...}]
curl -s "$url" | jd entities._values.0.id
# => 'Q1'map properties of an array
curl -s "$url" | jd entities._values._map.id
# => ['Q1']echo '["foo", "bar"]' | jd ._first
# => fooecho '["foo", "bar"]' | jd ._first
# => barWrapped results like { entities: { Q1: [Object] }, success: 1 } are more readible but aren't valid JSON. And sometimes, for whatever reason, you want a valid JSON output; there in a option for that: --json|-j
curl -s "$url" | jd entities.Q1.aliases --json
You can even specify the output indentation level (Between 0 and 9. Default: 2):
curl -s "$url" | jd entities.Q1.aliases --json=0
curl -s "$url" | jd entities.Q1.aliases --json=4
Notice that it disables the depth option as it's responsible for the wrapping mechanism.
Add the --line option to parse the stdin line by line
curl https://some.ndjson.dump | jd --line .key
There is a tolerance for JSON lines ending by a comma, and any line that isn't starting by a { or a } is ignored.

