New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

jsondepth

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jsondepth

a small command-line tool to parse JSON to log it with the desired depth

Source
npmnpm
Version
1.9.0
Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

jsondepth

A small command-line tool to walk through the depth levels of a json objects

output json | jd <PATH>=. <DEPTH>=0

screenshot

Summary

Motivation

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.

Installation

npm install -g jsondepth

How-to

real world example:

url='https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1&format=json'
curl -s "$url" | jsondepth

logs 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

Specify a depth level

this is equivalent to the two previous one:

curl -s "$url" | jd 0

now let's go one-level deeper:

curl -s "$url" | jd 1

outputs:

{ entities: { Q1: [Object] }, success: 1 }
![we need to go deeper](http://vignette3.wikia.nocookie.net/glee/images/6/6f/We-need-to-go-deeper_inception.jpg/revision/latest) ```sh curl -s "$url" | jd 2 curl -s "$url" | jd 3 curl -s "$url" | jd 4 # etc ``` If 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. ```sh curl -s "$url" | jd -1 ```

Specify a path

curl -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']

Specify a depth and a path

if both a path and a depth are specified, path should come first, depth second

curl -s "$url" | jd entities.Q1.claims.P31.0 3

Access JS objects attributes

Native attributes

Arrays length
curl -s "$url" | jd entities.Q1.aliases.en.length
# => 5

Special keys

_keys

apply Object.keys to the final object

curl -s "$url" | jd entities._keys
# => ['Q1']
_values

apply _.values to an array

curl -s "$url" | jd entities._values
# => [{ id: 'Q1', etc...}]
curl -s "$url" | jd entities._values.0.id
# => 'Q1'
_map

map properties of an array

curl -s "$url" | jd entities._values._map.id
# => ['Q1']
_first
echo '["foo", "bar"]' | jd ._first
# => foo
_last
echo '["foo", "bar"]' | jd ._first
# => bar

Format the output as valid JSON

Wrapped 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.

Parse newline delimited JSON

When the input is newline delimited JSON, filters are applied line by line.

Keywords

json

FAQs

Package last updated on 01 May 2018

Related posts