jsonpath-cli

Command-Line interface for the jsonpath-plus library.

The jpp command enables running the jsonpath-plus library against files from the command line. JSONPath searches return a JSON array which jpp outputs. The --pretty option pretty-prints the output. Additional command line options can be found below.

Installation

npm install -g @jsware/jsonpath-cli 

Usage

Usage: jpp [options] [JSONPath Expression] [JSON Input File] Options: -V, --version display version -i, --input <file> input JSON file (default: stdin) -e, --jsonpath <expression> matching expression -o, --output <file> output file for matches (default: stdout) -p, --pretty pretty print matches (default: false) -s, --separate output each match separately (default: false) -b, --before <text> output text before any matches -r, --prefix [prefix] prefix when using --separate (default: false) -u, --suffix <suffix> suffix each match except last with <suffix> -U, --suffix-all <suffix> suffix all matches with <suffix> -a, --after <text> output text after all matches -h, --help display help for command 

The positional parameters, options, stdin and stdout can be used as alternative ways to control jpp as required. To pipe output through jpp use the --jsonpath option to specify just the JSONPath expression.

JSONPath returns an array of matches, which jpp outputs as a single array result (i.e. wrapped in array square brackets). Use --separate to output each result in turn. The --prefix option will prefix each match with the prefix text, replacing {0} in the text with the match index startig at 1. Using --prefix without a value defaults to "{0} ").

Examples

Once installed, the jpp command can be used to execute JSONPath expressions against JSON files. For exampe, using the petstore OAS openapi.json file:

List the paths in an OAS specification:

jpp --pretty openapi.json '$.paths.*~'

prints:

[ "/pet", "/pet/findByStatus", "/pet/findByTags", "/pet/{petId}", "/pet/{petId}/uploadImage", "/store/inventory", "/store/order", "/store/order/{orderId}", "/user", "/user/createWithList", "/user/login", "/user/logout", "/user/{username}" ] 

List the paths with put or post operations:

jpp --pretty openapi.json '$.paths[?(@.put || @.post)]~'

prints:

[ "/pet", "/pet/{petId}", "/pet/{petId}/uploadImage", "/store/order", "/user", "/user/createWithList", "/user/{username}" ] 

Save the paths with get operations taking parameters:

cat openapi.json | jpp --separate --jsonpath '$.paths[?(@.get && @.get.parameters)]~' --output matches.txt

creates matches.txt containing:

"/pet/findByStatus" "/pet/findByTags" "/pet/{petId}" "/store/order/{orderId}" "/user/login" "/user/logout" "/user/{username}" 

Print the paths, each match prefixed with the match number:

jpp --separate --prefix '{0}: ' '$.paths[*]~' openapi.json

prints:

1: "/pet" 2: "/pet/findByStatus" 3: "/pet/findByTags" 4: "/pet/{petId}" 5: "/pet/{petId}/uploadImage" 6: "/store/inventory" 7: "/store/order" 8: "/store/order/{orderId}" 9: "/user" 10: "/user/createWithList" 11: "/user/login" 12: "/user/logout" 13: "/user/{username}"