Quickly edit json files from the command line
Project description
jse - JSON Editor
quickly edit json files from the command line
jse is pragmatic and terse. It lets you edit json fast, without needing to care about quotes, types, exact indexes, or any of the stuff that makes json a pain.
Usage
$ jse <file> <mode> <query> <value>
TLDR Version
edit an existing key: -e --edit
$ jse config.json --edit app.version 0.3.3
add a new element: -a --add
$ jse todo.json --add list.shopping {task:eggs,done:false}
delete a value: -d --delete
$ jse problems.json --delete problems[99]
full examples with json files below
Installing
pip3 install jse
Running from Source
Requiremets:
- Python 3.7
Steps:
- clone the repository
- make the run script executable
chmod +x run.py
- place jse on the path
ln -s /path/to/run.py ~/.local/bin/jse
jse has no runtime dependencies, but does use pytest for tests.
Examples
Assume we have this json file
# example.json
{
"users": [
{"name": "alice", "age": 21, "admin": false},
{"name": "bob", "age": 57, "admin": true},
{"name": "charlie", "age": 37, "admin": false}
]
}
We want to delete the user alice using jse. All we need to do is specify -d
or --delete
mode and the path to her user
object
$ jse example.json -d users[0]
We can use both index or dot notation.
$ jse example.json -d users.0 #users.first or users.^ also work
# example.json
{
"users": [
{"name": "bob", "age": 57, "admin": true},
{"name": "charlie", "age": 37, "admin": false}
]
}
Now lets make charlie an admin. To edit an existing field we use the edit command with -e
or --edit
. Edit takes a key to change and its new value.
$ jse example.json -e users.1.admin true
# example.json
{
"users": [
{"name": "bob", "age": 57, "admin": true},
{"name": "charlie", "age": 37, "admin": true}
]
}
jse is smart enough to infer datatypes from the command line. it can also accept complex nested objects and arrays in a terse, quote-free format. Lets add a new nested field to the file with --add
or -a
$ jse example.json -a highscore [{score:32.5,user:bob,metadata:{ip:192.168.1.102,client:firefox}}]
{
"users": [
{"name": "bob", "age": 57, "admin": true},
{"name": "charlie", "age": 37, "admin": true}
],
"highscore": [
{
"score": 32.5,
"user": "bob",
"metadata": {
"ip": "192.168.1.102",
"client": "firefox"
}
}
]
}
jse also understands lists, so we can add new elements to one without needing an explicit index. It will infer we are trying to append from --add
instead of changing the list to an object (--edit
)
$ jse example.json -a highscore {score:52,user:charlie}
{
"users": [
{"name": "bob", "age": 57, "admin": true},
{"name": "charlie", "age": 37, "admin": true}
],
"highscore": [
{
"score": "32.5",
"user": "bob",
"metadata": {
"ip": "192.168.1.102",
"client": "firefox"
}
},
{
"score": 52.0,
"user": "charlie"
}
]
}
jse's error messages are informative, because no one wants a generic KeyError
$ jse example.json -a users.0.name "not bob"
'name' already has a value. Use --edit to modify it
$ jse example.json -d users[2]
There is no element with index 2. The largest index is 1
You can also delete mulitple keys using -d, by passing them seperately
$ jse example.json -d users.first.age users.1.age
{
"users": [
{
"name": "bob",
"admin": true,
},
{
"name": "charlie",
"admin": true
}
]
...
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file jse-0.0.6.tar.gz
.
File metadata
- Download URL: jse-0.0.6.tar.gz
- Upload date:
- Size: 18.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.5 CPython/3.7.7 Darwin/17.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1165719f30186ef0067bf8fdc95e106a082a03eff75e04a18380ccdc8e9f9e9a |
|
MD5 | 25fe4ff0814ec31e93178615f72497d5 |
|
BLAKE2b-256 | 4da35c0fc0b0d78ae11a5b3c5c58fa4f8a0283bdf33cf3da206e12a950c45bb6 |
File details
Details for the file jse-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: jse-0.0.6-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.5 CPython/3.7.7 Darwin/17.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e73fa5d536908c88cb3f026d14d8eced596e8e17f995344dd2633b9a75a62a43 |
|
MD5 | 2e6a8963a966ac08bbb5f455e8d4292b |
|
BLAKE2b-256 | 0acb2da0a7bfa42c925432617cab09c33595307f5364e1a68bea3fd8f1e47498 |