5
5
6
6
package apijson ;
7
7
8
- import java .util .List ;
9
- import java .util .Set ;
10
- import java .util .StringTokenizer ;
11
-
12
8
import com .alibaba .fastjson .JSONArray ;
13
9
import com .alibaba .fastjson .JSONObject ;
14
10
11
+ import java .util .List ;
12
+ import java .util .Set ;
13
+
15
14
/**parser for response
16
15
* @author Lemon
17
16
* @see #getObject
23
22
public class JSONResponse extends apijson .JSONObject {
24
23
private static final long serialVersionUID = 1L ;
25
24
25
+ // 节约性能和减少 bug,除了关键词 @key ,一般都符合变量命名规范,不符合也原样返回便于调试
26
+ /**格式化带 - 中横线的单词
27
+ */
28
+ public static boolean IS_FORMAT_HYPHEN = false ;
29
+ /**格式化带 _ 下划线的单词
30
+ */
31
+ public static boolean IS_FORMAT_UNDERLINE = false ;
32
+ /**格式化带 $ 美元符的单词
33
+ */
34
+ public static boolean IS_FORMAT_DOLLAR = false ;
35
+
26
36
private static final String TAG = "JSONResponse" ;
27
37
28
38
public JSONResponse () {
@@ -206,10 +216,6 @@ public JSONResponse getJSONResponse(String key) {
206
216
//状态信息,非GET请求获得的信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
207
217
208
218
209
-
210
-
211
-
212
-
213
219
/**
214
220
* key = clazz.getSimpleName()
215
221
* @param clazz
@@ -408,18 +414,18 @@ public static String getTableName(String fullName) {
408
414
409
415
/**获取变量名
410
416
* @param fullName
411
- * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = true, formatAt = true, formatHyphen = true, firstCase = true
417
+ * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean )} formatColon = true, formatAt = true, formatHyphen = true, firstCase = true
412
418
*/
413
419
public static String getVariableName (String fullName ) {
414
420
if (isArrayKey (fullName )) {
415
421
fullName = StringUtil .addSuffix (fullName .substring (0 , fullName .length () - 2 ), "list" );
416
422
}
417
- return formatKey (fullName , true , true , true , true );
423
+ return formatKey (fullName , true , true , true , true , false , true );
418
424
}
419
425
420
426
/**格式化数组的名称 key[] => keyList; key:alias[] => aliasList; Table-column[] => tableColumnList
421
427
* @param key empty ? "list" : key + "List" 且首字母小写
422
- * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = true, firstCase = true
428
+ * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean )} formatColon = false, formatAt = true, formatHyphen = true, firstCase = true
423
429
*/
424
430
public static String formatArrayKey (String key ) {
425
431
if (isArrayKey (key )) {
@@ -430,28 +436,29 @@ public static String formatArrayKey(String key) {
430
436
return key .substring (index + 1 ); //不处理自定义的
431
437
}
432
438
433
- return formatKey (key , false , true , true , true ); //节约性能,除了数组对象 Table-column:alias[] ,一般都符合变量命名规范
439
+ return formatKey (key , false , true , true , IS_FORMAT_UNDERLINE , IS_FORMAT_DOLLAR , false ); //节约性能,除了数组对象 Table-column:alias[] ,一般都符合变量命名规范
434
440
}
435
441
436
442
/**格式化对象的名称 name => name; name:alias => alias
437
443
* @param key name 或 name:alias
438
- * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = false, firstCase = true
444
+ * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean )} formatColon = false, formatAt = true, formatHyphen = false, firstCase = true
439
445
*/
440
446
public static String formatObjectKey (String key ) {
441
447
int index = key == null ? -1 : key .indexOf (":" );
442
448
if (index >= 0 ) {
443
- return key .substring (index + 1 ); //不处理自定义的
449
+ return key .substring (index + 1 ); // 不处理自定义的
444
450
}
445
451
446
- return formatKey (key , false , true , false , true ); //节约性能,除了表对象 Table:alias ,一般都符合变量命名规范
452
+ return formatKey (key , false , true , IS_FORMAT_HYPHEN , IS_FORMAT_UNDERLINE , IS_FORMAT_DOLLAR , false ); //节约性能,除了表对象 Table:alias ,一般都符合变量命名规范
447
453
}
448
454
449
455
/**格式化普通值的名称 name => name; name:alias => alias
450
456
* @param fullName name 或 name:alias
451
- * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = false, firstCase = false
457
+ * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean )} formatColon = false, formatAt = true, formatHyphen = false, firstCase = false
452
458
*/
453
459
public static String formatOtherKey (String fullName ) {
454
- return formatKey (fullName , false , true , false , false ); //节约性能,除了关键词 @key ,一般都符合变量命名规范,不符合也原样返回便于调试
460
+ return formatKey (fullName , false , true , IS_FORMAT_HYPHEN , IS_FORMAT_UNDERLINE , IS_FORMAT_DOLLAR
461
+ , IS_FORMAT_HYPHEN || IS_FORMAT_UNDERLINE || IS_FORMAT_DOLLAR ? false : null );
455
462
}
456
463
457
464
@@ -460,10 +467,13 @@ public static String formatOtherKey(String fullName) {
460
467
* @param formatAt 去除前缀 @ , @a => a
461
468
* @param formatColon 去除分隔符 : , A:b => b
462
469
* @param formatHyphen 去除分隔符 - , A-b-cd-Efg => aBCdEfg
470
+ * @param formatUnderline 去除分隔符 _ , A_b_cd_Efg => aBCdEfg
471
+ * @param formatDollar 去除分隔符 $ , A$b$cd$Efg => aBCdEfg
463
472
* @param firstCase 第一个单词首字母小写,后面的首字母大写, Ab => ab ; A-b-Cd => aBCd
464
473
* @return name => name; name:alias => alias
465
474
*/
466
- public static String formatKey (String fullName , boolean formatColon , boolean formatAt , boolean formatHyphen , boolean firstCase ) {
475
+ public static String formatKey (String fullName , boolean formatColon , boolean formatAt , boolean formatHyphen
476
+ , boolean formatUnderline , boolean formatDollar , Boolean firstCase ) {
467
477
if (fullName == null ) {
468
478
Log .w (TAG , "formatKey fullName == null >> return null;" );
469
479
return null ;
@@ -476,10 +486,17 @@ public static String formatKey(String fullName, boolean formatColon, boolean for
476
486
fullName = formatAt (fullName );
477
487
}
478
488
if (formatHyphen ) {
479
- fullName = formatHyphen (fullName , firstCase );
489
+ fullName = formatHyphen (fullName , firstCase != null );
490
+ }
491
+ if (formatUnderline ) {
492
+ fullName = formatUnderline (fullName , firstCase != null );
493
+ }
494
+ if (formatDollar ) {
495
+ fullName = formatDollar (fullName , firstCase != null );
480
496
}
481
497
482
- return firstCase ? StringUtil .firstCase (fullName ) : fullName ; //不格式化普通 key:value (value 不为 [], {}) 的 key
498
+ // 默认不格式化普通 key:value (value 不为 [], {}) 的 key
499
+ return firstCase == null ? fullName : StringUtil .firstCase (fullName , firstCase );
483
500
}
484
501
485
502
/**"@key" => "key"
@@ -489,6 +506,7 @@ public static String formatKey(String fullName, boolean formatColon, boolean for
489
506
public static String formatAt (@ NotNull String key ) {
490
507
return key .startsWith ("@" ) ? key .substring (1 ) : key ;
491
508
}
509
+
492
510
/**key:alias => alias
493
511
* @param key
494
512
* @return
@@ -502,15 +520,60 @@ public static String formatColon(@NotNull String key) {
502
520
* @param key
503
521
* @return
504
522
*/
505
- public static String formatHyphen (@ NotNull String key , boolean firstCase ) {
506
- String name = "" ;
523
+ public static String formatHyphen (@ NotNull String key , Boolean firstCase ) {
524
+ return formatDivider (key , "-" , firstCase );
525
+ }
526
+
527
+ /**A_b_cd_Efg => ABCdEfg
528
+ * @param key
529
+ * @return
530
+ */
531
+ public static String formatUnderline (@ NotNull String key , Boolean firstCase ) {
532
+ return formatDivider (key , "_" , firstCase );
533
+ }
507
534
508
- StringTokenizer parts = new StringTokenizer (key , "-" );
509
- name += parts .nextToken ();
510
- while (parts .hasMoreTokens ()) {
511
- String part = parts .nextToken ();
512
- name += firstCase ? StringUtil .firstCase (part , true ) : part ;
535
+ /**A$b$cd$Efg => ABCdEfg
536
+ * @param key
537
+ * @return
538
+ */
539
+ public static String formatDollar (@ NotNull String key , Boolean firstCase ) {
540
+ return formatDivider (key , "$" , firstCase );
541
+ }
542
+
543
+ /**A.b.cd.Efg => ABCdEfg
544
+ * @param key
545
+ * @return
546
+ */
547
+ public static String formatDot (@ NotNull String key , Boolean firstCase ) {
548
+ return formatDivider (key , "." , firstCase );
549
+ }
550
+
551
+ /**A/b/cd/Efg => ABCdEfg
552
+ * @param key
553
+ * @return
554
+ */
555
+ public static String formatDivider (@ NotNull String key , Boolean firstCase ) {
556
+ return formatDivider (key , "/" , firstCase );
557
+ }
558
+
559
+ /**去除分割符,返回驼峰格式
560
+ * @param key
561
+ * @param divider
562
+ * @param firstCase
563
+ * @return
564
+ */
565
+ public static String formatDivider (@ NotNull String key , @ NotNull String divider , Boolean firstCase ) {
566
+ String [] parts = StringUtil .split (key , divider );
567
+ StringBuilder name = new StringBuilder ();
568
+ for (String part : parts ) {
569
+ part = part .toLowerCase (); // 始终小写,也方便反过来 ABCdEfg -> A_b_cd_Efg
570
+ if (firstCase != null ) {
571
+ // 始终小写, A_b_cd_Efg -> ABCdEfg, firstCase ? part.toLowerCase() : part.toUpperCase();
572
+ part = StringUtil .firstCase (part , firstCase );
573
+ }
574
+ name .append (part );
513
575
}
514
- return name ;
576
+ return name . toString () ;
515
577
}
578
+
516
579
}
0 commit comments