虽然网上很多在线的JSON工具,但局限于内网的工作环境中经常接触JSON报文,而接触的都是只能快速格式化而无法转化成压缩单行的工具或方法,即需要在紧凑的单行 JSON 和易于阅读的格式化 JSON 之间切换。
这里记录一下好早以前写的使用 Python 和 Tkinter 构建一个简单且可执行的GUI 应用,通过pyinstaller打包成exe可执行文件,实现 JSON 之间的格式转换。
项目结构
界面包括以下的基本组件:
- 一个文本输入框,用于输入或显示 JSON 数据
- 两个按钮:分别用于转换为单行和格式化 JSON
代码实现
1、格式化函数,将JSON字符串格式化为带缩进的美观格式
def format_json(json_str):
"""
将JSON字符串格式化为带缩进的美观格式
"""
try:
# 解析JSON字符串为Python对象
data = json.loads(json_str)
# 格式化为带缩进的字符串
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
return formatted_json
except json.JSONDecodeError:
# 如果解析失败,抛出异常
raise ValueError("JSON内容格式不对噢!")
2、压缩为单行, 将JSON字符串转换为紧凑的单行格式
def minify_json(json_str):
"""
将JSON字符串转换为紧凑的单行格式
"""
try:
# 解析JSON字符串为Python对象
data = json.loads(json_str)
# 压缩为单行字符串
minified_json = json.dumps(data, separators=(',', ':'), ensure_ascii=False)
return minified_json
except json.JSONDecodeError:
# 如果解析失败,抛出异常
raise ValueError("JSON内容格式不对噢!")
3、两个按钮点击效果
def format_json_action():
"""
当用户点击格式化按钮时执行该格式化函数
"""
# 获取文本区域中的内容
input_text = text_area.get("1.0", tk.END).strip()
try:
# 试图格式化JSON
formatted_text = format_json(input_text)
# 清除文本区域并插入格式化后的JSON
text_area.delete("1.0", tk.END)
text_area.insert(tk.END, formatted_text)
except ValueError as e:
# 显示错误消息
messagebox.showerror("错误信息", str(e))
def minify_json_action():
"""
当用户点击压缩按钮时执行该单行压缩函数
"""
# 获取文本区域中的内容
input_text = text_area.get("1.0", tk.END).strip()
try:
# 试图压缩JSON
minified_text = minify_json(input_text)
# 清除文本区域并插入压缩后的JSON
text_area.delete("1.0", tk.END)
text_area.insert(tk.END, minified_text)
except ValueError as e:
# 显示错误消息
messagebox.showerror("错误信息", str(e))
效果图:
功能说明
- 格式化按钮:输入 JSON 后,点击按钮会将 JSON 以缩进的形式显示,方便阅读
- 单行按钮:将 JSON 压缩为单行,适合在接口数据调试时使用
- 错误处理:如果输入的 JSON 无效,会提示用户
附上完整代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 广西甘路
# @File : json_format.py
# @Description :
# 带GUI界面的JSON单行格式化切换
import json
import tkinter as tk
from tkinter import messagebox, scrolledtext
import tkinter.font as tkFont
def format_json(json_str):
"""
将JSON字符串格式化为带缩进的美观格式
"""
try:
# 解析JSON字符串为Python对象
data = json.loads(json_str)
# 格式化为带缩进的字符串
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
return formatted_json
except json.JSONDecodeError:
# 如果解析失败,抛出异常
raise ValueError("JSON内容格式不对噢!")
def minify_json(json_str):
"""
将JSON字符串转换为紧凑的单行格式
"""
try:
# 解析JSON字符串为Python对象
data = json.loads(json_str)
# 压缩为单行字符串
minified_json = json.dumps(data, separators=(',', ':'), ensure_ascii=False)
return minified_json
except json.JSONDecodeError:
# 如果解析失败,抛出异常
raise ValueError("JSON内容格式不对噢!")
def format_json_action():
"""
当用户点击格式化按钮时执行该格式化函数
"""
# 获取文本区域中的内容
input_text = text_area.get("1.0", tk.END).strip()
try:
# 试图格式化JSON
formatted_text = format_json(input_text)
# 清除文本区域并插入格式化后的JSON
text_area.delete("1.0", tk.END)
text_area.insert(tk.END, formatted_text)
except ValueError as e:
# 显示错误消息
messagebox.showerror("错误信息", str(e))
def minify_json_action():
"""
当用户点击压缩按钮时执行该单行压缩函数
"""
# 获取文本区域中的内容
input_text = text_area.get("1.0", tk.END).strip()
try:
# 试图压缩JSON
minified_text = minify_json(input_text)
# 清除文本区域并插入压缩后的JSON
text_area.delete("1.0", tk.END)
text_area.insert(tk.END, minified_text)
except ValueError as e:
# 显示错误消息
messagebox.showerror("错误信息", str(e))
# 创建主窗口
root = tk.Tk()
root.title("JSON单行及格式化切换工具")
sizefont = tkFont.Font(size=15,weight='bold')
# 创建文本区域,带滚动条
text_area = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=60, height=30)
text_area.pack(padx=10, pady=10)
# 创建格式化按钮
format_button = tk.Button(root, text="格式化JSON",bg='#22C9C9',font=sizefont,command=format_json_action)
format_button.pack(side=tk.LEFT, ipadx=15, ipady=10,padx=50, pady=10)
# 创建压缩按钮
minify_button = tk.Button(root, text="单行JSON",bg='#22C9C9',font=sizefont,command=minify_json_action)
minify_button.pack(side=tk.RIGHT, ipadx=15, ipady=10,padx=50, pady=10)
# 启动主事件循环
root.mainloop()