在IPython Notebook中进行漂亮的JSON格式化

Kyl*_*ndt 29 python json ipython-notebook

是否有一种现有的方法可以让json.dumps()输出在ipython笔记本中显示为"漂亮"格式的JSON?

fil*_*mor 49

json.dumps有一个indent参数,打印结果应该足够了:

print(json.dumps(obj, indent=2))
Run Code Online (Sandbox Code Playgroud)

  • 输出中的颜色怎么样? (6认同)

jet*_*com 25

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)
Run Code Online (Sandbox Code Playgroud)

以可折叠格式输出数据:

RenderJSON(your_json)
Run Code Online (Sandbox Code Playgroud)

从这里粘贴的副本:https://www.reddit.com/r/IPython/comments/34t4m7/lpt_print_json_in_collapsible_format_in_ipython/

Github:https://github.com/caldwell/renderjson


Kyl*_*ron 23

这可能与OP要求的略有不同,但您可以使用IPython.display.JSON交互式查看JSON/dict对象.

from IPython.display import JSON
JSON({'a': [1, 2, 3, 4,], 'b': {'inner1': 'helloworld', 'inner2': 'foobar'}})
Run Code Online (Sandbox Code Playgroud)

编辑:这适用于Hydrogen和JupyterLab,但不适用于Jupyter Notebook或IPython终端.

:

在此输入图像描述 在此输入图像描述

  • 让我困惑的是,这在 Jupyter Lab 中有效,但在旧笔记本中却无效。如果存在,它会调用 _repr_json_ 。 (4认同)
  • 我从来没有这么快乐过! (2认同)

Joe*_*zas 9

我只是将扩展变量添加到@Kyle Barron 答案中:

from IPython.display import JSON
JSON(json_object, expanded=True)
Run Code Online (Sandbox Code Playgroud)

  • 对我来说没有错误,但我得到的只是输出“&lt;IPython.core.display.JSON object&gt;”。没有交互式漂亮的打印。 (5认同)
  • 它对我不起作用`TypeError:__init__()得到了意外的关键字参数'expanded'` (3认同)