基于Python 和tkinter 编写一个可视化工具,其中该程序会创建一个文本框用于输入JSON,且这个文本框下方提供一个格式化按钮,点击按钮后会将文本框内的JSON进行格式化,将格式化后的JSON替换文本框的内容。另一个输入框输入JSONPath表达式,提供一个确定按钮,点击确定后,程序会使用JSONPath表达式去解析JSON并提取元素值,输出到另一个文本框中。且所有文本框都要加上横向和纵向滚动条
时间: 2023-12-16 09:06:32 浏览: 155
好的,下面是一个简单的实现:
```python
import tkinter as tk
import json
from jsonpath_ng import parse
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.master.title("JSON工具")
self.pack()
self.create_widgets()
def create_widgets(self):
# JSON输入框
self.json_input = tk.Text(self, height=10, width=60)
self.json_input.grid(row=0, column=0, padx=5, pady=5, sticky="nsew")
# 格式化按钮
self.format_button = tk.Button(self, text="格式化", command=self.format_json)
self.format_button.grid(row=1, column=0, padx=5, pady=5)
# JSONPath输入框
self.jsonpath_input = tk.Entry(self)
self.jsonpath_input.grid(row=2, column=0, padx=5, pady=5)
# 确定按钮
self.extract_button = tk.Button(self, text="确定", command=self.extract_json)
self.extract_button.grid(row=2, column=1, padx=5, pady=5)
# 提取结果文本框
self.result_output = tk.Text(self, height=10, width=60)
self.result_output.grid(row=3, column=0, padx=5, pady=5, sticky="nsew")
# 添加滚动条
self.json_input_scrollbar = tk.Scrollbar(self.json_input)
self.json_input_scrollbar.pack(side="right", fill="y")
self.json_input.config(yscrollcommand=self.json_input_scrollbar.set)
self.json_input_scrollbar.config(command=self.json_input.yview)
self.result_output_scrollbar = tk.Scrollbar(self.result_output)
self.result_output_scrollbar.pack(side="right", fill="y")
self.result_output.config(yscrollcommand=self.result_output_scrollbar.set)
self.result_output_scrollbar.config(command=self.result_output.yview)
def format_json(self):
try:
json_str = self.json_input.get("1.0", "end")
formatted_json = json.dumps(json.loads(json_str), indent=4, ensure_ascii=False)
self.json_input.delete("1.0", "end")
self.json_input.insert("1.0", formatted_json)
except:
pass
def extract_json(self):
try:
json_str = self.json_input.get("1.0", "end")
json_data = json.loads(json_str)
jsonpath_expr = parse(self.jsonpath_input.get())
result = [match.value for match in jsonpath_expr.find(json_data)]
self.result_output.delete("1.0", "end")
self.result_output.insert("1.0", json.dumps(result, indent=4, ensure_ascii=False))
except:
pass
if __name__ == "__main__":
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
其中,我们使用了Tkinter的Text组件来实现文本框,使用Scrollbar组件来实现滚动条。JSON的格式化使用了json模块,JSONPath的解析使用了jsonpath_ng模块。在格式化和解析时,我们使用try-except语句来捕获异常,以防止程序崩溃。
阅读全文