1. 背景
由于公司系統(tǒng)實(shí)現(xiàn)的原因庸蔼,上班時(shí)經(jīng)常需要與 JSON 數(shù)據(jù)打交道糙捺,而手頭有沒(méi)有一個(gè)順手的格式化JSON數(shù)據(jù)的工具,之前用的是Chrome的一款叫做 FEHelper 的插件址遇,但是每次使用需要先打開(kāi)Chrome缴挖,在打開(kāi)插件铺呵,選擇格式化JSON功能斧拍,異常繁瑣酒奶。
既然找不到現(xiàn)成的順手的工具删咱,那何不自己弄一個(gè)屑埋,于是 skyutils 便誕生了。
2. 預(yù)覽
3. 使用
運(yùn)行環(huán)境
Python 3.6
PyQt5 5.9.1運(yùn)行
- 下載源碼:Github
- 進(jìn)入項(xiàng)目目錄
- 運(yùn)行
python skyutils.py
注:skyutils.py可接收兩個(gè)命令行參數(shù)痰滋,代表窗口的位置摘能。 - 使用
python skyutils.py
的確可以運(yùn)行這個(gè)程序续崖,如果你的環(huán)境配置沒(méi)問(wèn)題的話。
但是這是不推薦的方法团搞,因?yàn)椋翰粔蚩旖萃嗨ⅲ看芜\(yùn)行會(huì)伴隨一個(gè)命令行窗口。
推薦的方法:
使用AutoHotkey快速啟動(dòng)莺丑,以下是一個(gè)AutoHotkey腳本示例:
XButton1::
AppsKey::
CoordMode,Mouse,Screen
; 獲取鼠標(biāo)位置
MouseGetPos,mouseX,mouseY
CoordMode,Mouse,Relative
; 在鼠標(biāo)的位置附近打開(kāi) skyutils
; 使用pythonw命令是為了避免出現(xiàn)命令行窗口
Run ,pythonw skyutils\skyutils.py %mouseX% %mouseY%
return
運(yùn)行這個(gè)腳本之后著蟹,若按下了鼠標(biāo)側(cè)鍵,或者鍵盤(pán)的應(yīng)用鍵梢莽,便會(huì)啟動(dòng)程序萧豆。
有關(guān)AutoHotkey的用法,請(qǐng)自行查找相關(guān)資料昏名。
應(yīng)用鍵一般長(zhǎng)這樣:
-
自定義菜單
該工具支持自定義菜單涮雷。
- 第一步,編輯文件:
skyutils/configuration.json
[
{
"icon":"icon/format_json.png",
"title":"JSON",
"description":"格式化JSON"
},
{
"icon":"icon/hide.png",
"title":"hide",
"description":"hide"
},
{
"icon":"icon/quit.png",
"title":"quit",
"description":"退出"
}
]
數(shù)組里的每一項(xiàng)代表一個(gè)菜單項(xiàng)轻局,其中各字段含義如下:
icon : 該項(xiàng)的圖標(biāo)
title : 該項(xiàng)的標(biāo)題洪鸭,也是點(diǎn)擊項(xiàng)之后要執(zhí)行的函數(shù)名
description : 描述,當(dāng)鼠標(biāo)懸停時(shí)仑扑,彈出的描述性文字
注:hide
和quit
兩項(xiàng)是自帶的菜單览爵,不建議刪除,分別是隱藏程序(便于下次快速啟動(dòng))镇饮,和退出程序蜓竹;他們的處理函數(shù)也不需要在skyutils/function.py
中定義(見(jiàn)第三步)。
第二步储藐,找一個(gè)好看的圖標(biāo)
為該菜單找一個(gè)漂亮的圖標(biāo)format_json.png
俱济,放到skyutils/icon
目錄下。第三步钙勃,在
skyutils/function.py
中定義函數(shù)JSON
當(dāng)鼠標(biāo)點(diǎn)擊該菜單時(shí)蛛碌,會(huì)調(diào)用該函數(shù);為什么是調(diào)用這個(gè)函數(shù)呢辖源,是因?yàn)?code>configuration.json文件中title
字段指定了蔚携。下面是一個(gè)示例:
def JSON(command, success, failed):
try:
format = formatJson.formatJSON(getClip())
setClip(format)
success(format)
except Exception as e:
message = str(type(e)) + '\n' + str(e)
failed(message)
注:其中的formatJSON, getClip, setClip
函數(shù)都需要自己實(shí)現(xiàn),事實(shí)上在這個(gè)函數(shù)里可以做任何操作同木,在這里做的操作是:獲取剪切板的字符串浮梢,并且把他當(dāng)成json格式進(jìn)行格式化跛十。
1)若格式化成功彤路,將格式化之后的字符串設(shè)置到剪切板,并調(diào)用success
方法芥映,通知程序顯示成功的提示消息洲尊。
2)若失敗远豺,就調(diào)用failed
方法,傳遞錯(cuò)誤消息坞嘀,通知程序顯示錯(cuò)誤的提示消息
4. 應(yīng)用場(chǎng)景
如下一個(gè)格式糟糕的json串:
[{
"logic":"and","left":false,
"required":false,
"field":"instructionName",
"compare":"cn","data":"",
"right":false,"title":"hello",
"inputtype":"input","presetFunc":{
"funcId":"29857c2n8345o2cnx395m3f34zx9m384",
"funcCode":"code_func",
"funcName":"test"
}}]
- 按下Ctrl + A, Ctrl + X 將串剪切到剪切板躯护;
- 按下鼠標(biāo)側(cè)鍵呼出skyutils,雙擊JSON 菜單項(xiàng)丽涩;
- 回到之前的編輯器棺滞,Ctrl + V 。
以上三步矢渊,便格式化好了這個(gè)json字符串继准。
以下是一個(gè)演示: