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.


npm install -g @jsware/jsonpath-cli


Usage: jpp [options] [JSONPath Expression] [JSON Input File]

  -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} ").


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.*~'



List the paths with put or post operations:

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



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:


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

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


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}"