🙆
json 見やすくする
test.txt
{
"person": {
"name": "John Doe",
"age": 30,
"address": {
"city": "Example City",
"state": "Test State",
"zipcode": "12345"
},
"contacts": [
{
"type": "email",
"value": "john.doe@example.com"
},
{
"type": "phone",
"value": "555-1234"
}
]
}
}
python code
import tkinter as tk
from tkinter import ttk
import json
def load_text(filename):
with open(filename, 'r', encoding='utf-8') as file:
data = file.read()
return data
def main():
# テキストファイルのパスを指定
text_file_path = "test.txt"
# テキストデータを読み込む
text_data = load_text(text_file_path)
try:
# JSON形式の文字列をPythonオブジェクトに変換
json_data = json.loads(text_data)
except json.JSONDecodeError as e:
print(f"JSONデコードエラー: {e}")
return
# GUIの設定
root = tk.Tk()
root.title("Text Viewer")
# ウィンドウサイズを設定
root.geometry("800x600")
# フォントの設定
custom_font = ("Helvetica", 12)
# ttk.Styleを使用してフォントを設定
style = ttk.Style()
style.configure("Treeview", font=custom_font)
# Treeviewを使用してJSONデータを表示
tree = ttk.Treeview(root)
tree.heading("#0", text="JSON Data", anchor='w')
tree.pack(expand=tk.YES, fill=tk.BOTH)
# 再帰的にJSONデータをTreeviewに表示する関数
def display_json_tree(json_data, parent_node=''):
for key, value in json_data.items():
if isinstance(value, dict):
node_id = tree.insert(parent_node, "end", text=key, open=True)
display_json_tree(value, parent_node=node_id)
else:
tree.insert(parent_node, "end", text=f"{key}: {value}")
display_json_tree(json_data)
root.mainloop()
if __name__ == "__main__":
main()
import tkinter as tk
from tkinter import ttk
import json
def load_text(filename):
with open(filename, 'r', encoding='utf-8') as file:
data = file.read()
return data
def main():
# テキストファイルのパスを指定
text_file_path = "test.txt"
# テキストデータを読み込む
text_data = load_text(text_file_path)
try:
# JSON形式の文字列をPythonオブジェクトに変換
json_data = json.loads(text_data)
except json.JSONDecodeError as e:
print(f"JSONデコードエラー: {e}")
return
# GUIの設定
root = tk.Tk()
root.title("Text Viewer")
# ウィンドウサイズを設定
root.geometry("800x600")
# フォントの設定
custom_font = ("Helvetica", 12)
# ttk.Styleを使用してフォントを設定
style = ttk.Style()
style.configure("Treeview", font=custom_font)
# Treeviewを使用してJSONデータを表示
tree = ttk.Treeview(root)
tree.heading("#0", text="JSON Data", anchor='w')
tree.pack(expand=tk.YES, fill=tk.BOTH)
# JSONデータを展開して表示する関数
def display_json_tree(json_data, parent_node=''):
for key, value in json_data.items():
if isinstance(value, dict):
node_id = tree.insert(parent_node, "end", text=key, open=True)
display_json_tree(value, parent_node=node_id)
elif isinstance(value, list):
node_id = tree.insert(parent_node, "end", text=f"{key} (list)", open=True)
for i, item in enumerate(value):
item_id = tree.insert(node_id, "end", text=f"[{i}]", open=False)
display_json_tree(item, parent_node=item_id)
else:
tree.insert(parent_node, "end", text=f"{key}: {value}")
display_json_tree(json_data)
root.mainloop()
if __name__ == "__main__":
main()
表形式
import tkinter as tk
from tkinter import ttk
import json
def load_text(filename):
with open(filename, 'r', encoding='utf-8') as file:
data = file.read()
return data
def flatten_json(json_data, parent_key='', separator='.'):
flattened = {}
for key, value in json_data.items():
new_key = f"{parent_key}{separator}{key}" if parent_key else key
if isinstance(value, dict):
flattened.update(flatten_json(value, new_key, separator=separator))
elif isinstance(value, list):
for i, item in enumerate(value):
item_key = f"{new_key}[{i}]"
if isinstance(item, dict):
flattened.update(flatten_json(item, item_key, separator=separator))
else:
flattened[item_key] = item
else:
flattened[new_key] = value
return flattened
def copy_all_to_clipboard(event):
selected = tree.selection()
if selected:
key = tree.item(selected, 'text')
values = tree.item(selected, 'values')
if key and values:
root.clipboard_clear()
root.clipboard_append(f"{key}: {values[0]}")
root.update()
def copy_key_to_clipboard(event):
selected = tree.selection()
if selected:
key = tree.item(selected, 'text')
if key:
root.clipboard_clear()
root.clipboard_append(key)
root.update()
def copy_value_to_clipboard(event):
selected = tree.selection()
if selected:
values = tree.item(selected, 'values')
if values:
root.clipboard_clear()
root.clipboard_append(values[0])
root.update()
def paste_from_clipboard(event):
data = root.clipboard_get()
if data:
tree.insert('', 'end', text="Pasted", values=(data,))
def main():
# テキストファイルのパスを指定
text_file_path = "test.txt"
# テキストデータを読み込む
text_data = load_text(text_file_path)
try:
# JSON形式の文字列をPythonオブジェクトに変換
json_data = json.loads(text_data)
except json.JSONDecodeError as e:
print(f"JSONデコードエラー: {e}")
return
# フラットなデータに変換
flattened_data = flatten_json(json_data)
# GUIの設定
global root
root = tk.Tk()
root.title("JSON Viewer")
# Treeviewを使用して表形式でJSONデータを表示
global tree
tree = ttk.Treeview(root)
tree['columns'] = ('Value',)
tree.heading("#0", text="Key", anchor='w')
tree.heading('Value', text='Value', anchor='w')
tree.column('#0', stretch=tk.YES)
tree.column('Value', stretch=tk.YES)
for key, value in flattened_data.items():
tree.insert('', 'end', text=key, values=(str(value),))
tree.pack(expand=tk.YES, fill=tk.BOTH)
# キーと値をコピーペーストできるようにする
tree.bind("<Control-a>", copy_all_to_clipboard)
tree.bind("<Control-k>", copy_key_to_clipboard)
tree.bind("<Control-c>", copy_value_to_clipboard)
tree.bind("<Control-v>", paste_from_clipboard)
root.mainloop()
if __name__ == "__main__":
main()
たためる
import tkinter as tk
from tkinter import ttk
import json
def load_text(filename):
with open(filename, 'r', encoding='utf-8') as file:
data = file.read()
return data
def main():
# テキストファイルのパスを指定
text_file_path = "test.txt"
# テキストデータを読み込む
text_data = load_text(text_file_path)
try:
# JSON形式の文字列をPythonオブジェクトに変換
json_data = json.loads(text_data)
except json.JSONDecodeError as e:
print(f"JSONデコードエラー: {e}")
return
# GUIの設定
root = tk.Tk()
root.title("Text Viewer")
# ウィンドウサイズを設定
root.geometry("800x600")
# フォントの設定
custom_font = ("Helvetica", 12)
# ttk.Styleを使用してフォントを設定
style = ttk.Style()
style.configure("Treeview", font=custom_font)
# Treeviewを使用してJSONデータを表示
tree = ttk.Treeview(root)
tree.heading("#0", text="JSON Data", anchor='w')
tree.pack(expand=tk.YES, fill=tk.BOTH)
# JSONデータを展開して表示する関数
def display_json_tree(json_data, parent_node=''):
for key, value in json_data.items():
if isinstance(value, dict):
node_id = tree.insert(parent_node, "end", text=key, open=True)
display_json_tree(value, parent_node=node_id)
elif isinstance(value, list):
node_id = tree.insert(parent_node, "end", text=f"{key} (list)", open=True)
for i, item in enumerate(value):
item_id = tree.insert(node_id, "end", text=f"[{i}]", open=False)
display_json_tree(item, parent_node=item_id)
else:
tree.insert(parent_node, "end", text=f"{key}: {value}")
display_json_tree(json_data)
root.mainloop()
if __name__ == "__main__":
main()
Discussion