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

时间:2013-09-18 13:05:04

标签: python json ipython-notebook

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

6 个答案:

答案 0 :(得分:42)

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

print(json.dumps(obj, indent=2))

答案 1 :(得分:24)

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/

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

答案 2 :(得分:13)

这可能与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终端中无效。

Hydrogen内部:

enter image description here enter image description here

答案 3 :(得分:1)

我发现此页面正在寻找一种方法来消除输出中的文字\n。我们正在使用Jupyter进行编码访问,我想要一种方法来显示函数的结果真正的perty,如。我的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's automatic newline
for line in line_list:
    print line

我希望这有助于某人!

答案 4 :(得分:1)

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

from IPython.display import JSON
JSON(json_object, expanded=True)

答案 5 :(得分:-1)

如果您希望数据可折叠,请使用以下代码段:

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}})

enter image description here