JSON encode clipboard contents back to clipboard with Bash and Python

Here’s a Bash one-liner to JSON-encode the current contents of the clipboard and replace the clipboard contents with the JSON-encoded output:

xclip -o | python -c 'import sys;import json;print(json.dumps(sys.stdin.read().strip()))' | tee >(xclip -selection clipboard)

The equivalent on Mac is:

pbpaste | python -c 'import sys;import json;print(json.dumps(sys.stdin.read().strip()))' | pbcopy

To set it as an alias in Linux (jec for “json encode clipboard”):

alias jec='xclip -selection clipboard -o | python -c "import sys;import json;print(json.dumps(sys.stdin.read().strip()))" | tee >(xclip -selection clipboard)'

Then you can copy some string text, run jec, and then paste the JSON-encoded string back from the clipboard.

This is handy when you need to double encode a JSON string to be able to nest it inside an outer JSON object, e.g.

# ctrl + c: {"this":"is some json"}

jec

# ctrl + v: "{\"this\":\"is some json\"}"

The three clipboard JSON manipulation aliases I have set up are:

alias jec='xclip -selection clipboard -o | python3 -c "import sys;import json;print(json.dumps(sys.stdin.read().strip()))" | tee >(xclip -selection clipboard)'
alias pcj='xclip -selection clipboard -o | python3 -m json.tool | tee >(xclip -selection clipboard)'
alias mcj='xclip -selection clipboard -o | python3 -c "import sys;import json;print(json.dumps(json.loads(sys.stdin.read()),separators=(\",\",\":\")))" | tee >(xclip -selection clipboard)'

Tech mentioned