IPython 노트북의 예쁜 JSON 포맷
다른 방법이 있나요?json.dumps()
출력은 ipython 노트북에서 "예쁜" 형식의 JSON으로 표시됩니까?
json.dumps
가 있다indent
인수, 결과 인쇄로 충분합니다.
print(json.dumps(obj, indent=2))
이것은 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노트북이나 IPython 단말에서는 동작하지 않습니다.
수소 내부:
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
@Kyle Barron 답변에 확장 변수를 추가합니다.
from IPython.display import JSON
JSON(json_object, expanded=True)
이 페이지를 찾은 건 문자 그대로를 없애는 방법을 찾는 거야\n
출력에 s가 표시됩니다.우리는 Jupyter를 사용하여 코딩 인터뷰를 하고 있는데, 나는 실제 기능처럼 결과를 표시할 수 있는 방법을 원했다.내 버전의 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
이게 누군가에게 도움이 됐으면 좋겠어!
Jupyter 노트북의 경우 링크를 생성하여 새 탭에서 열 수 있습니다(firefox의 JSON 뷰어 사용).
from IPython.display import Markdown
def jsonviewer(d):
f=open('file.json','w')
json.dump(d,f)
f.close()
print('open in firefox new tab:')
return Markdown('[file.json](./file.json)')
jsonviewer('[{"A":1}]')
'open in firefox new tab:
@filmor answer(https://stackoverflow.com/a/18873131/7018342))의 확장자일 뿐입니다.
이것은 json.dumps와 호환되지 않는 요소를 인코딩하고 인쇄와 같이 사용할 수 있는 편리한 기능을 제공합니다.
import json
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
if isinstance(obj, np.floating):
return float(obj)
if isinstance(obj, np.ndarray):
return obj.tolist()
if isinstance(obj, np.bool_):
return bool(obj)
return super(NpEncoder, self).default(obj)
def print_json(json_dict):
print(json.dumps(json_dict, indent=2, cls=NpEncoder))
사용방법:
json_dict = {"Name":{"First Name": "Lorem", "Last Name": "Ipsum"}, "Age":26}
print_json(json_dict)
>>>
{
"Name": {
"First Name": "Lorem",
"Last Name": "Ipsum"
},
"Age": 26
}
일부 용도에서는 들여쓰기를 통해 다음을 수행해야 합니다.
print(json.dumps(parsed, indent=2))
Json 구조는 기본적으로 트리 구조입니다.좀 더 화려한 것을 찾으려다 우연히 다른 형태의 멋진 나무들을 묘사한 이 멋진 종이를 발견했다. https://blog.ouseful.info/2021/07/13/exploring-the-hierarchical-structure-of-dataframes-and-csv-data/.
여기에는 인터랙티브 트리가 몇 개 있으며, 이 질문에 대한 링크와 Shankar ARUL의 쓰러지는 트리가 포함된 코드도 포함되어 있습니다.
다른 샘플로는 플롯리 사용이 있습니다. 플롯리의 코드 예는 다음과 같습니다.
import plotly.express as px
fig = px.treemap(
names = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]
)
fig.update_traces(root_color="lightgrey")
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
그리고 트리브를 사용해서.그런 의미에서 이 github은 멋진 시각화도 제공합니다.다음으로 treelib를 사용한 예를 제시하겠습니다.
#%pip install treelib
from treelib import Tree
country_tree = Tree()
# Create a root node
country_tree.create_node("Country", "countries")
# Group by country
for country, regions in wards_df.head(5).groupby(["CTRY17NM", "CTRY17CD"]):
# Generate a node for each country
country_tree.create_node(country[0], country[1], parent="countries")
# Group by region
for region, las in regions.groupby(["GOR10NM", "GOR10CD"]):
# Generate a node for each region
country_tree.create_node(region[0], region[1], parent=country[1])
# Group by local authority
for la, wards in las.groupby(['LAD17NM', 'LAD17CD']):
# Create a node for each local authority
country_tree.create_node(la[0], la[1], parent=region[1])
for ward, _ in wards.groupby(['WD17NM', 'WD17CD']):
# Create a leaf node for each ward
country_tree.create_node(ward[0], ward[1], parent=la[1])
# Output the hierarchical data
country_tree.show()
이를 바탕으로 json을 트리로 변환하는 함수를 만들었습니다.
from treelib import Node, Tree, node
def json_2_tree(o , parent_id=None, tree=None, counter_byref=[0], verbose=False, listsNodeSymbol='+'):
if tree is None:
tree = Tree()
root_id = counter_byref[0]
if verbose:
print(f"tree.create_node({'+'}, {root_id})")
tree.create_node('+', root_id)
counter_byref[0] += 1
parent_id = root_id
if type(o) == dict:
for k,v in o.items():
this_id = counter_byref[0]
if verbose:
print(f"tree.create_node({str(k)}, {this_id}, parent={parent_id})")
tree.create_node(str(k), this_id, parent=parent_id)
counter_byref[0] += 1
json_2_tree(v , parent_id=this_id, tree=tree, counter_byref=counter_byref, verbose=verbose, listsNodeSymbol=listsNodeSymbol)
elif type(o) == list:
if listsNodeSymbol is not None:
if verbose:
print(f"tree.create_node({listsNodeSymbol}, {counter_byref[0]}, parent={parent_id})")
tree.create_node(listsNodeSymbol, counter_byref[0], parent=parent_id)
parent_id=counter_byref[0]
counter_byref[0] += 1
for i in o:
json_2_tree(i , parent_id=parent_id, tree=tree, counter_byref=counter_byref, verbose=verbose,listsNodeSymbol=listsNodeSymbol)
else: #node
if verbose:
print(f"tree.create_node({str(o)}, {counter_byref[0]}, parent={parent_id})")
tree.create_node(str(o), counter_byref[0], parent=parent_id)
counter_byref[0] += 1
return tree
예를 들어 다음과 같습니다.
import json
json_2_tree(json.loads('{"2": 3, "4": [5, 6]}'),verbose=False,listsNodeSymbol='+').show()
다음과 같은 기능이 있습니다.
+
├── 2
│ └── 3
└── 4
└── +
├── 5
└── 6
하는 동안에
json_2_tree(json.loads('{"2": 3, "4": [5, 6]}'),listsNodeSymbol=None).show()
주다
+
├── 2
│ └── 3
└── 4
├── 5
└── 6
보시다시피, 자신이 얼마나 노골적인지, 아니면 얼마나 콤팩트한지에 따라 다른 나무들을 만들 수 있습니다.제가 좋아하는 것 중 하나와 가장 컴팩트한 것 중 하나는 yaml을 사용하는 것입니다.
import yaml
j = json.loads('{"2": "3", "4": ["5", "6"], "7": {"8": "9"}}')
print(yaml.dump(j, sort_keys=False))
간결하고 명확합니다.
'2': '3'
'4':
- '5'
- '6'
'7':
'8': '9'
언급URL : https://stackoverflow.com/questions/18873066/pretty-json-formatting-in-ipython-notebook
'source' 카테고리의 다른 글
스프링 부트에서는 확장자가 .original인 jar 또는 war 파일이 생성되는 이유는 무엇입니까? (0) | 2023.03.10 |
---|---|
angular.js $http 서비스를 지연합니다. (0) | 2023.03.10 |
액션이 디스패치된 후 Redux 스토어에서 특정 속성 변경을 수신하는 방법 (0) | 2023.03.10 |
어레이 JSON 길이를 가져옵니다.그물 (0) | 2023.03.10 |
ORA-01775: 유사어 루프 체인 디버깅 방법 (0) | 2023.03.10 |