1
1
#!/usr/bin/env python
2
2
# -*- coding:utf-8 -*-
3
- # @Filename : formater .py
3
+ # @Filename : formatter .py
4
4
# @Date : 18-1-26 下午5:48
5
5
# @Author : DebuggerX
6
6
from functools import partial
13
13
import pyperclip
14
14
15
15
# 定义显示的json格式化字符串的缩进量为4个空格
16
- indent = ' '
16
+ indent = ' ' * 4
17
17
18
18
# 临时存储
19
19
last_list_com_box = None
@@ -54,7 +54,14 @@ def analyse_json_obj(json_obj, level=0, res=None, json_key=None):
54
54
else :
55
55
res .append ('%s<%s> : <[list]>9' % (indent * level , json_key ))
56
56
if len (json_obj ) > 0 :
57
- analyse_json_obj (json_obj [0 ], level + 1 , res )
57
+ json_obj_temp = json_obj [0 ] if json_obj [0 ] is not None else {}
58
+ if len (list (filter (lambda item : type (item ) is dict or item is None , json_obj ))) == len (json_obj ):
59
+ for i in range (1 , len (json_obj )):
60
+ for k in json_obj [i ]:
61
+ if json_obj_temp is None or (k not in json_obj_temp or json_obj_temp [k ] is None ):
62
+ json_obj_temp [k ] = json_obj [i ][k ]
63
+ json_obj_temp = None if json_obj_temp is {} else json_obj_temp
64
+ analyse_json_obj (json_obj_temp , level + 1 , res )
58
65
59
66
else :
60
67
# 针对基本数据类型,在插入的键值对数据后再加入类型序号标志位
@@ -110,6 +117,7 @@ def get_type_combobox(need_connect, line):
110
117
111
118
com_box .setCurrentIndex (obj_type )
112
119
elif obj_type == 8 :
120
+ com_box .addItem ('Map<String, dynamic>' )
113
121
com_box .setCurrentText ('' )
114
122
elif obj_type == 9 :
115
123
com_box .setCurrentText ('List<>' )
@@ -131,7 +139,8 @@ def update_list(json_str):
131
139
json_obj = json .loads (json_str )
132
140
# 传入json对象,返回所需要的格式化协议数据数组
133
141
res = analyse_json_obj (json_obj )
134
-
142
+ global last_list_com_box
143
+ last_list_com_box = None
135
144
ui .tv_fields .setRowCount (len (res ))
136
145
137
146
pre_type_combobox = None
@@ -206,11 +215,32 @@ def generate_bean():
206
215
ui .te_json .setText (res )
207
216
208
217
218
+ def str_to_camel_case (text ):
219
+ try :
220
+ arr = filter (None , text .split ('_' ))
221
+ res = ''
222
+ for i in arr :
223
+ res = res + i [0 ].upper () + i [1 :]
224
+ return res [0 ].lower () + res [1 :]
225
+ except IndexError :
226
+ return text
227
+
228
+
229
+ def convert_names_to_camel_case (index ):
230
+ if ui .tv_fields .horizontalHeaderItem (index ).text () == 'Name(click to camelCase)' :
231
+ for i in range (ui .tv_fields .rowCount ()):
232
+ name_cell = ui .tv_fields .cellWidget (i , 2 )
233
+ if type (name_cell ) is QtWidgets .QTextEdit :
234
+ assert isinstance (name_cell , QtWidgets .QTextEdit )
235
+ name_cell .setText (str_to_camel_case (name_cell .toPlainText ()))
236
+
237
+
209
238
def init_event ():
210
239
# 绑定json解析按钮事件
211
240
ui .btn_format .clicked .connect (json_format )
212
241
ui .btn_generate .clicked .connect (generate_bean )
213
242
ui .btn_copy .clicked .connect (copy_left_text )
243
+ ui .tv_fields .horizontalHeader ().sectionClicked .connect (convert_names_to_camel_case )
214
244
215
245
216
246
def copy_left_text ():
@@ -222,7 +252,7 @@ def copy_left_text():
222
252
# 设置表格基础样式
223
253
def init_table ():
224
254
# 设置表头,表头文字居中
225
- ui .tv_fields .setHorizontalHeaderLabels (['Fields' , 'Types' , 'Name' ])
255
+ ui .tv_fields .setHorizontalHeaderLabels (['Fields' , 'Types' , 'Name(click to camelCase) ' ])
226
256
ui .tv_fields .horizontalHeader ().setDefaultAlignment (QtCore .Qt .AlignHCenter )
227
257
# 表头自动平分宽度
228
258
ui .tv_fields .horizontalHeader ().setSectionResizeMode (QtWidgets .QHeaderView .Stretch )
@@ -253,5 +283,5 @@ def custom_ui():
253
283
custom_ui ()
254
284
widget .show ()
255
285
code = check_version ()
256
- widget .setWindowTitle (widget .windowTitle ().replace ('code' ,str (code )))
286
+ widget .setWindowTitle (widget .windowTitle ().replace ('code' , str (code )))
257
287
sys .exit (app .exec_ ())
0 commit comments