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