python实现带GUI界面的JSON单行及格式化之间切换

       虽然网上很多在线的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()

       最后总结一下,其实还可以延伸追加一键清空一键复制等功能,这个小工具适合在日常脚本调试中使用,帮助提高 JSON 数据处理的效率,希望这篇文章对您在 JSON 格式转换方面有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值