Find the path of a key / value in a JSON hierarchy easily.
When working with big and nested JSON files, sometimes it's very difficult to figure out the path of a key. You open the JSON file in a text editor, find the key / value pair you need, but then it can be a pain to get the full path of the key.
Consider the following JSON file:
{
"a": 1,
"b": {
"c": 2,
"friends": [
{
"best": "Alice"
},
{
"second": "Bob"
},
[5, 6, 7],
[
{"one": 1},
{"two": 2}
]
]
}
}
JSON Path will traverse it recursively and print every path / value pair:
$ ./jsonpath.py samples/short.json
root['a'] => 1
root['b']['c'] => 2
root['b']['friends'][0]['best'] => 'Alice'
root['b']['friends'][1]['second'] => 'Bob'
root['b']['friends'][2][0] => 5
root['b']['friends'][2][1] => 6
root['b']['friends'][2][2] => 7
root['b']['friends'][3][0]['one'] => 1
root['b']['friends'][3][1]['two'] => 2
The idea is to combine its usage with the Unix command
grep
. For instance, what's the path of the key that
leads to Bob?
$ ./jsonpath.py samples/short.json | grep -i bob
root['b']['friends'][1]['second'] => 'Bob'
Then simply paste it in your application:
>>> d
{'a': 1, 'b': {'c': 2, 'friends': [{'best': 'Alice'}, {'second': 'Bob'}, [5, 6, 7], [{'one': 1}, {'two': 2}]]}}
>>> d['b']['friends'][1]['second']
'Bob'
>>>
The program was tested under Linux. It only uses the standard library, so you only need to create a virtual environment if you need a development version. With the development version you can do type checking and you can create a standalone executable.
$ poetry install
If you want a standalone executable, then issue the command
$ pynt exe
which will create the executable file jsonpath
in the
dist/
folder. (Note: for this to work, install the dev. version.)
- go-jsonpath: a Go implementation of this project
- See Chris Nielsen's excellent JSON Visualization webapp. Somewhat hidden feature, but if you click on an item in the table, you'll get its path on the left side. I wanted something similar in the command line. Once I was working with sensitive data, and I didn't want to paste them in a third-party webapp.
- It seems Chris Nielsen's webapp is gone. However, someone saved it and it can be found here: https://github.com/2x2xplz/json_visualizer . Online version: https://altearius.github.io/tools/json/index.html .
- JSON Crack (webpage, GitHub link). JSON Crack is a tool that generates graph diagrams from JSON objects. It has an online interface, but you can also install it as a VS Code extension.