1. 前言
最近玩接口测试时, F12开发者工具下发现接口参数过多, 直接写太浪费时间, 复制又需要一个个添加引号, 着实麻烦, 所以寻思偷个懒一键格式化
2. 思路
起初想到使用正则, 给:
两边的参数添加引号, 但发现整形数据不好处理, 且有的参数对应的值为空, 决定放弃此方案
鉴于requests下的参数params
, data
, json
等都是dict类型, 考虑按行读取文本, 并以:
分隔, 可以很容易地对键值进行处理, 生成的字典数据再使用json.dumps
美化
3. 效果图
info.gif4. 源码
import PySimpleGUI as sg
import re
import json
origin_text_key = 'origin_text_key'
format_text_key = 'format_text_key'
format_btn_event = 'FORMAT'
column1 = [
[sg.Text('原始文本: ')],
[sg.Multiline(size=(50, 30), focus=True, key=origin_text_key)],
]
column2 = [
[sg.Text('格式化字典数据: ')],
[sg.Multiline(size=(50, 30), key=format_text_key)],
]
layout = [
[sg.Column(column1), sg.Button(format_btn_event, size=(10, 2)), sg.Column(column2)],
]
sg.ChangeLookAndFeel('GreenMono')
window = sg.Window('params format').Layout(layout)
while True:
btn, values = window.Read()
if btn is None:
break
elif btn == format_btn_event:
origin_text = values[origin_text_key]
lines = origin_text.splitlines()
result = {}
for line in lines:
if not line:
continue
temp = re.split(r': *', line, maxsplit=1)
if len(temp) == 2:
k, v = temp
if v:
try:
if v.find('.') > -1:
result[k] = float(v)
else:
result[k] = int(v)
except:
result[k] = v
else:
result[k] = None
format_text = json.dumps(result, indent=4)
format_text = re.sub('null', 'None', format_text)
window.FindElement(format_text_key).Update(format_text)
window.Close()
网友评论