[Java] json字符串格式化 →→→→→进入此内容的聊天室

来自 , 2019-09-12, 写在 Java, 查看 135 次.
URL http://www.code666.cn/view/d1dc3a82
  1.  
  2. public class JsonFormatTool {
  3.     /**
  4.      * 单位缩进字符串。
  5.      */
  6.     private static String SPACE = "     ";
  7.  
  8.     /**
  9.      * 返回格式化JSON字符串。
  10.      *
  11.      * @param json 未格式化的JSON字符串。
  12.      * @return 格式化的JSON字符串。
  13.      */
  14.     public static String formatJson(String json) {
  15.         StringBuffer result = new StringBuffer();
  16.  
  17.         int length = json.length();
  18.         int number = 0;
  19.         char key = 0;
  20.  
  21.         // 遍历输入字符串。
  22.         for (int i = 0; i < length; i++) {
  23.             // 1、获取当前字符。
  24.             key = json.charAt(i);
  25.  
  26.             // 2、如果当前字符是前方括号、前花括号做如下处理:
  27.             if ((key == '[') || (key == '{')) {
  28.                 // (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
  29.                 if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
  30.                     result.append('\n');
  31.                     result.append(indent(number));
  32.                 }
  33.  
  34.                 // (2)打印:当前字符。
  35.                 result.append(key);
  36.  
  37.                 // (3)前方括号、前花括号,的后面必须换行。打印:换行。
  38.                 result.append('\n');
  39.  
  40.                 // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
  41.                 number++;
  42.                 result.append(indent(number));
  43.  
  44.                 // (5)进行下一次循环。
  45.                 continue;
  46.             }
  47.  
  48.             // 3、如果当前字符是后方括号、后花括号做如下处理:
  49.             if ((key == ']') || (key == '}')) {
  50.                 // (1)后方括号、后花括号,的前面必须换行。打印:换行。
  51.                 result.append('\n');
  52.  
  53.                 // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
  54.                 number--;
  55.                 result.append(indent(number));
  56.  
  57.                 // (3)打印:当前字符。
  58.                 result.append(key);
  59.  
  60.                 // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
  61.                 if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
  62.                     result.append('\n');
  63.                 }
  64.  
  65.                 // (5)继续下一次循环。
  66.                 continue;
  67.             }
  68.  
  69.             // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
  70.             if ((key == ',')) {
  71.                 if ((json.charAt(i - 1) =='"')||(json.charAt(i - 1) =='}')||(json.charAt(i - 1) ==']')) {                      
  72.                     result.append(key);
  73.                     result.append('\n');
  74.                     result.append(indent(number));
  75.                     continue;
  76.                 }else{
  77.                         result.append(key);              
  78.                     continue;
  79.                 }
  80.             }
  81.  
  82.             // 5、打印:当前字符。
  83.             result.append(key);
  84.         }
  85.  
  86.         return result.toString();
  87.     }
  88.  
  89.     /**
  90.      * 返回指定次数的缩进字符串。每一次缩进tab,即SPACE。
  91.      *
  92.      * @param number 缩进次数。
  93.      * @return 指定缩进次数的字符串。
  94.      */
  95.     private static String indent(int number) {
  96.         StringBuffer result = new StringBuffer();
  97.         for (int i = 0; i < number; i++) {
  98.             result.append(SPACE);
  99.         }
  100.         return result.toString();
  101.     }
  102. }

回复 "json字符串格式化"

这儿你可以回复上面这条便签

captcha