
在日常运维排查日志或者日常开发过程中,免不了和json字符串或者日志打交道。
未经格式化的json可能看的不太方便,一般网络上有很多类似的json formatter的免费网站提供格式化的服务 ,但是到底网站有没有留存你的数据,这里需要打个问号了。
毕竟JSONFormatter和CodeBeautify之前被爆出过数据泄露的事情,所有我们最好还是用本地的格式化工具。
下面是用python实现本地json格式化工具,代码也很简单。
需要用到pyinstaller,因为需要打包成windows上的exe可执行文件。
vim json_formatter.py 内容如下:
# pip install pyinstaller
import tkinter as tk
from tkinter import scrolledtext, messagebox
import json
import ast
def format_json():
raw = input_text.get("1.0", tk.END).strip()
if not raw:
messagebox.showwarning("警告", "请输入 JSON 内容!")
return
parsed = None
error_msg = ""
# 第一步:尝试标准 JSON
try:
parsed = json.loads(raw)
except json.JSONDecodeError as e1:
error_msg = str(e1)
# 第二步:尝试 Python 字面量(支持单引号)
try:
parsed = ast.literal_eval(raw)
# 验证结果是 dict 或 list(JSON 支持的顶层类型)
if not isinstance(parsed, (dict, list)):
raise ValueError("顶层必须是对象或数组")
except Exception as e2:
# 两个都失败,报错
messagebox.showerror("格式错误", f"既不是合法 JSON,也不是有效的 Python 字面量。")
return
# 格式化并显示
try:
formatted = json.dumps(parsed, indent=4, ensure_ascii=False)
output_text.delete("1.0", tk.END)
output_text.insert("1.0", formatted)
except Exception as e:
messagebox.showerror("格式化失败", f"无法序列化为 JSON:\n{e}")
def copy_to_clipboard():
content = output_text.get("1.0", tk.END).strip()
if content: # 只有非空时才复制
root.clipboard_clear()
root.clipboard_append(content)
root.update() # 确保剪贴板内容立即生效(尤其在 Windows 上)
# 创建主窗口
root = tk.Tk()
root.title("JSON 格式化工具 v0.1")
root.geometry("1200x800")
# 全局配置:让中间区域(文本框)占满可用空间
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
# ===== 左侧:输入区域 =====
input_text = scrolledtext.ScrolledText(
root, wrap=tk.WORD, font=("Consolas", 11), relief="flat", bd=1
)
input_text.grid(row=0, column=0, padx=(10, 5), pady=10, sticky="nsew")
# ===== 右侧:输出区域 + 复制按钮 =====
right_frame = tk.Frame(root)
right_frame.grid(row=0, column=1, padx=(5, 10), pady=10, sticky="nsew")
right_frame.grid_rowconfigure(0, weight=1)
right_frame.grid_columnconfigure(0, weight=1)
output_text = scrolledtext.ScrolledText(
right_frame, wrap=tk.WORD, font=("Consolas", 11), bg="#f9f9f9", relief="flat", bd=1
)
output_text.grid(row=0, column=0, sticky="nsew")
# 复制按钮(无弹窗)
copy_btn = tk.Button(
right_frame,
text="复制结果",
command=copy_to_clipboard,
bg="#2196F3",
fg="white",
font=("Microsoft YaHei", 10, "bold"),
padx=15,
pady=5
)
copy_btn.grid(row=1, column=0, pady=(8, 0), sticky="e") # 靠右对齐
# ===== 底部:格式化按钮 =====
button_frame = tk.Frame(root)
button_frame.grid(row=1, column=0, columnspan=2, pady=(0, 10))
format_btn = tk.Button(
button_frame,
text="格式化 JSON",
command=format_json,
bg="#4CAF50",
fg="white",
font=("Microsoft YaHei", 11, "bold"),
padx=40,
pady=8
)
format_btn.pack()
# 启动主循环
root.mainloop()打包
pyinstaller.exe -F -w .\json_formatter.py打包完成后,会在项目下生成一个dist的目录, 里面的 json_formatter.exe 就是生成的可执行文件。
运行效果如下:
1、解析非标的json字符串(单引号)

2、解析标准的json字符串

3、解析异常字符串

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。