Skip to content

Instantly share code, notes, and snippets.

@BenderV
Created August 29, 2016 12:44
Show Gist options
  • Save BenderV/567e91174937e106ad753225a29cac0c to your computer and use it in GitHub Desktop.
Save BenderV/567e91174937e106ad753225a29cac0c to your computer and use it in GitHub Desktop.
Jupyter render json
import uuid
from IPython.display import display_javascript, display_html, display, HTML
import json
from bson import json_util
# https://caldwell.github.io/renderjson/
# https://github.com/ipython-contrib/jupyter_contrib_nbextensions
# https://www.reddit.com/r/IPython/comments/34t4m7/lpt_print_json_in_collapsible_format_in_ipython/
#TODO: adapt height
style_css = """<style>
.renderjson a { text-decoration: none; }
.renderjson .disclosure { color: crimson; font-size: 150%; }
.renderjson .syntax { color: grey; }
.renderjson .string { color: black; }
.renderjson .number { color: green; }
.renderjson .boolean { color: red; }
.renderjson .key { color: black; }
.renderjson .keyword { color: grey; }
.renderjson .object.syntax { color: lightseagreen; }
.renderjson .array.syntax { color: lightsalmon; }
</style>"""
class RenderJSON(object):
def __init__(self, json_data, default=json_util.default):
if isinstance(json_data, dict) or isinstance(json_data, list):
self.json_str = json.dumps(json_data, default=default)
else:
self.json_str = json
self.uuid = str(uuid.uuid4())
def _ipython_display_(self):
display_html('<body>'+style_css+'<div id="{}" style="height: 400px; width:100%;"></div></body>'.format(self.uuid),
raw=True
)
display_javascript("""
require(["https://rawgit.com/caldwell/renderjson/master/renderjson.js"], function() {
document.getElementById('%s').appendChild(renderjson(%s))
});
""" % (self.uuid, self.json_str), raw=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment