2014-10-20 11 views
7

Ich bin auf der Suche nach JSON in der Befehlszeile, in Python, mit ASCII-Farben zu drucken. Zum Beispiel wird mit dem (sehr zufrieden) jq Dienstprogramm Farb ify JSON bold ASCII Farben wie so:Pretty-Druck-JSON mit ASCII-Farbe in Python

  • Eingang: curl --silent http://coinabul.com/api.php | jq .
  • Ausgang:
    jq output

Wer weiß, wie zu tun Dieser Effekt von Python? Ein paar SO-Fragen liefern einige gute Informationen über die Verwendung von ASCII-Farben aus Python (z. B. Print in terminal with colors using Python?), aber dieser Effekt erfordert, denke ich, die hübsche Druckmaschine mit der Kolorierungsmaschine auf eine andere Weise zu kombinieren.

Antwort

1

Dies sollten Sie (er druckt Schlüssel in blau) loszulegen:

import json 
import urllib2 

# ANSI color terminal escape sequences 
OKBLUE = '\033[94m' 
ENDC = '\033[0m' 

def pretty(keyvals, indent=''): 
    print '{' 
    for key, val in keyvals.iteritems(): 
     print '{} {}"{}"{}:'.format(indent, OKBLUE, key, ENDC), 
     if isinstance(val, dict): 
      pretty(val, indent + ' ') 
     elif isinstance(val, str): 
      print '"{}",'.format(val) 
     else: 
      print '{},'.format(val) 
    print indent + '},' 

req = urllib2.Request('http://coinabul.com/api.php', headers={ 
     'User-Agent': 'Mozilla/5.0', 
     }) 

page = urllib2.urlopen(req) 
parsed = json.load(page) 

pretty(parsed) 
+0

Es wäre schön, wenn es möglich wäre, zu vermeiden, neu zu erfinden alle die Pretty-Printing (Einrückung) Logik. –

+0

Nun, Sie könnten 'json.dumps (geparsed, indent = 2)' 'und dann den Text parsen, den es Ihnen gibt und das kolorieren ... Ich dachte, das war schlimmer (mehr fehleranfällig, etc.). Wenn das, wonach du suchst, eine Bibliothek ist, die das alles für dich tut, nun, ich denke, es existiert nicht. –

+0

@ kermas Antwort vermeidet die Neuerfindung von Rädern ... –

10

Verwenden Pygments Bibliothek:

import json 
from pygments import highlight 
from pygments.lexers import JsonLexer 
from pygments.formatters import TerminalFormatter 

json_object = json.loads('{"foo":"bar"}') 
json_str = json.dumps(json_object, indent=4, sort_keys=True) 
print(highlight(json_str, JsonLexer(), TerminalFormatter()))