Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
122 lines (80 sloc) 3.3 KB

JSON Tool Recipes

List the module search paths:

    json -e require.paths -np

List the package search prefixes:

    json -e system.prefixes -np

List the active engine names:

    json -e system.engines -np

List the prefix paths of every installed package:

    json -e 'require("packages").order' -n -f directory -p

Visit the home page of every contributor to every installed package. "open" is on Mac OS X only, but you can use "gnome-open" or "xdg-open" on Linux, or "kde-open" on Kubuntu specifically:

    json -e 'require("packages").order'
        -n
        -e _.contributors
        -A                  # flatten the array
        -w _.url            # if they've got one
        -e _.url            # extract it from their Author object
        -p
    | sort | uniq | xargs open

List the contributors to Narwhal with field selection:

    json -i package.json -j -f contributors -Anp

Use JSONPath to list the contributors:

    json -i package.json -j -$ $.contributors -Anp

Enquote all of the MP3s in your collection, line by line:

    find . -name '*.mp3' | json -nJp

    find . -name '*.mp3' -print0 | json -n0Jp

Rename all of your MP3s so that URL encoded patterns are unescaped:

    find .
        -name '*.mp3'
        -print0             # write null-terminated lines
    | json
        -n                  # line by line
        -z0                 # both read and write null-terminated lines
        -c                  # this forces an array to
                            # be accumulated for reprint
        -p                  # print in escaped form
        -e 'unescape(_)' -p # reprint unescaped
    | xargs
        -0                  # read null-terminated lines
        -n 2                # one command for each adjacent pair
        mv

Convert /etc/passwd to JSON:

    json -i /etc/passwd -nd: -NTJp

Convert /etc/passwd to JSON with Objects instead of Arrays:

    cat /etc/passwd | json
        -n
        -d:
        -F name,password,uid,gid,class,change,expire,gecos,home,shell
        -x _.uid=+_.uid
        -x _.gid=+_.gid
        -f name,_
        -N
        -O
        -TJp

Create a JSON mapping from user name to UID and format it as CSV:

    cat /etc/passwd | json -nd: -f 0,2 -D, -p

Create a JSON mapping from user name to UID and write it out as a single line of JSON:

    json -i /etc/passwd -nd: -f 0,2 -NOJp

Grab the UID of the "root" user:

    json -i /etc/passwd -nd: -f0,2 -N -O -f root -p

Reverse engineer a package catalog from installed packages:

    json
        -e 'require("packages").order'
        -n # line input mode
        -e '[_.name || _.directory.dirname().basename(), JSON.decode(_.directory.resolve("package.json").read())'
        -N # object input mode
        -O
        -v '{version:1,packages:_}'
        -TJ
        -p

Use the JSON tool as a pointless pipe buffer:

    json -np

Print the number '1' thrice.

    json -e 1 -ppp

Find the largest number from 1 to 10:

    $(which jot) $(which seq) 10 | json -njNe 'Math.max.apply(this, _)' -p

Put all your eggs in one basket:

    json -e 'require("narwhal")' -f LEFT,RIGHT -np