Reputation: 13081
In python, If I have a JSON object obj
, then I can
print json.dumps(obj, sort_keys=True, indent=4)
in order to get a pretty printout of the object. Is it possible to prettify the output even further: add some colors in particular? Something like the result of [1]
cat foo.json | jq '.'
[1] jq
the JSON Swiss Army toolbox: http://stedolan.github.io/jq/
Upvotes: 40
Views: 21422
Reputation: 3557
I like using rich which has a dependency on pyments. But it covers all your console coloring needs, used in pip to show progress and also autoformats json:
Upvotes: 11
Reputation: 991
For python3 :
#!/usr/bin/python3
#coding: utf-8
from pygments import highlight, lexers, formatters
import json
d = {"test": [1, 2, 3, 4], "hello": "world"}
formatted_json = json.dumps(d, indent=4)
colorful_json = highlight(formatted_json, lexers.JsonLexer(), formatters.TerminalFormatter())
print(colorful_json)
Upvotes: 1
Reputation: 1465
The accepted answer doesn't seem to be working with more recent versions of Pygments and Python. So here's how you can do it in Pygments 2.7.2+:
import json
from pygments import highlight
from pygments.formatters.terminal256 import Terminal256Formatter
from pygments.lexers.web import JsonLexer
d = {"test": [1, 2, 3, 4], "hello": "world"}
# Generate JSON
raw_json = json.dumps(d, indent=4)
# Colorize it
colorful = highlight(
raw_json,
lexer=JsonLexer(),
formatter=Terminal256Formatter(),
)
# Print to console
print(colorful)
Upvotes: 9
Reputation: 2229
You can use Pygments to color your JSON output. Based on what you have:
formatted_json = json.dumps(obj, sort_keys=True, indent=4)
from pygments import highlight, lexers, formatters
colorful_json = highlight(unicode(formatted_json, 'UTF-8'), lexers.JsonLexer(), formatters.TerminalFormatter())
print(colorful_json)
Output example:
Upvotes: 65