Ответ 1
json.dumps
имеет аргумент indent
, печать результата должна быть достаточной:
print(json.dumps(obj, indent=2))
Есть ли существующий способ получить вывод json.dumps()
для отображения как "симпатичного" отформатированного JSON внутри ipython-ноутбука?
json.dumps
имеет аргумент indent
, печать результата должна быть достаточной:
print(json.dumps(obj, indent=2))
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)
Чтобы вывести данные в сворачиваемом формате:
RenderJSON(your_json)
Скопируйте здесь: https://www.reddit.com/r/IPython/comments/34t4m7/lpt_print_json_in_collapsible_format_in_ipython/
Это может немного отличаться от того, что запрашивал OP, но вы можете использовать IPython.display.JSON
для интерактивного просмотра объекта JSON/dict
.
from IPython.display import JSON
JSON({'a': [1, 2, 3, 4,], 'b': {'inner1': 'helloworld', 'inner2': 'foobar'}})
Изменение: это работает в Hydrogen и JupyterLab, но не в Jupyter Notebook или в терминале IPython.
Внутри водорода:
Я нашел эту страницу для поиска способа исключения литерала \n
в выходном файле. Мы делаем интервью с использованием Jupyter, и мне нужен способ показать результат функции real perty like. Моя версия Jupyter (4.1.0) не отображает их как фактические разрывы строк. Решение, которое я произвел, (я вроде надеюсь, что это не лучший способ сделать это, но...)
import json
output = json.dumps(obj, indent=2)
line_list = output.split("\n") # Sort of line replacing "\n" with a new line
# Now that our obj is a list of strings leverage print automatic newline
for line in line_list:
print line
Надеюсь, это поможет кому-то!
Я просто добавляю расширенную переменную в ответ @Kyle Barron:
from IPython.display import JSON
JSON(json_object, expanded=True)
Если вы хотите, чтобы ваши данные были разборными, используйте этот фрагмент:
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
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() {
renderjson.set_show_to_level(1)
document.getElementById('%s').appendChild(renderjson(%s))
});
""" % (self.uuid, self.json_str), raw=True)
и тогда вы можете напечатать свой json как:
RenderJSON({"sag": {"a": 1, "b": 2}})