Интерактивное исследование JSON-объектов в Jupyter
Работаете с JSON в Jupyter Notebook? Тогда вам понравится вот такой способ интерактивного исследования сложных JSON-объектов, который я утащил с stackoverflow, а туда его утащили с c reddit (автор slashvee), используется пакет renderjson
, автор David Caldwell.
In [4]:
import uuid
from IPython.display import display_javascript, display_html, display
import json
class RenderJSON(object):
def __init__(self, json_data):
if isinstance(json_data, dict):
self.json_str = json.dumps(json_data)
else:
self.json_str = json_data
self.uuid = str(uuid.uuid4())
def _ipython_display_(self):
display_html('<div id="{}" style="height: 600px; width:100%;"></div>'.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)
Вот так это работает:
In [5]:
gradebook = [{'name': {'first': 'Alice', 'last': 'Carroll'},
'grades': [3, 4, 5]},
{'name': {'first': 'Bob', 'last': 'Dylan'},
'grades': [4, 3, 2, 5]}]
In [6]:
RenderJSON(gradebook)
# потыкайте в плюсики
Вот более серьёзный пример. Запросим какой-нибудь большой и страшный датасет.
In [4]:
import requests
url = "http://openapi.clearspending.ru/restapi/v3/contracts/search/"
data = requests.get(url, dict(customerregion='05', sort='-price')).json()
In [5]:
RenderJSON(data)
И почему я не знал этого раньше?
P.S. Кстати, вы можете добавить код, определяющий класс RenderJSON
, в файл ~/.ipython/profile_default/startup/render-json.py
и он будет автоматически запускаться при старте нового ноутбука!
Комментарии