首页

关于google-gson源码包中对json数据进行加密转码处理的代码示例

标签:google,gson,json加密,转码     发布时间:2018-05-16   

一、前言

关于google-gson源码包中com.google.gson.Escaper加密转码处理类,可以对json数据类型进行加密转码处理escapeJsonString操作,详情参见源码说明。

二、源码说明 

package com.google.gson;@b@@b@import java.io.IOException;@b@import java.util.Collections;@b@import java.util.HashSet;@b@import java.util.Set;@b@@b@final class Escaper@b@{@b@  private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };@b@  private static final Set<Character> JS_ESCAPE_CHARS;@b@  private static final Set<Character> HTML_ESCAPE_CHARS;@b@  private final boolean escapeHtmlCharacters;@b@@b@  Escaper(boolean escapeHtmlCharacters)@b@  {@b@    this.escapeHtmlCharacters = escapeHtmlCharacters;@b@  }@b@@b@  public String escapeJsonString(CharSequence plainText) {@b@    StringBuilder escapedString = new StringBuilder(plainText.length() + 20);@b@    try {@b@      escapeJsonString(plainText, escapedString);@b@    } catch (IOException e) {@b@      throw new RuntimeException(e);@b@    }@b@    return escapedString.toString();@b@  }@b@@b@  private void escapeJsonString(CharSequence plainText, StringBuilder out) throws IOException {@b@    int pos = 0;@b@    int len = plainText.length();@b@@b@    for (int i = 0; i < len; i += charCount) {@b@      int codePoint = Character.codePointAt(plainText, i);@b@      int charCount = Character.charCount(codePoint);@b@@b@      if ((!(isControlCharacter(codePoint))) && (!(mustEscapeCharInJsString(codePoint)))) {@b@        break label234:@b@      }@b@@b@      out.append(plainText, pos, i);@b@      pos = i + charCount;@b@      switch (codePoint)@b@      {@b@      case 8:@b@        out.append("\\b");@b@        break;@b@      case 9:@b@        out.append("\\t");@b@        break;@b@      case 10:@b@        out.append("\\n");@b@        break;@b@      case 12:@b@        out.append("\\f");@b@        break;@b@      case 13:@b@        out.append("\\r");@b@        break;@b@      case 92:@b@        out.append("\\\\");@b@        break;@b@      case 47:@b@        out.append("\\/");@b@        break;@b@      case 34:@b@        out.append("\\\"");@b@        break;@b@      default:@b@        appendHexJavaScriptRepresentation(codePoint, out);@b@      }@b@    }@b@@b@    label234: out.append(plainText, pos, len);@b@  }@b@@b@  private boolean mustEscapeCharInJsString(int codepoint) {@b@    if (!(Character.isSupplementaryCodePoint(codepoint))) {@b@      char c = (char)codepoint;@b@      return ((JS_ESCAPE_CHARS.contains(Character.valueOf(c))) || ((this.escapeHtmlCharacters) && (HTML_ESCAPE_CHARS.contains(Character.valueOf(c)))));@b@    }@b@@b@    return false;@b@  }@b@@b@  private static boolean isControlCharacter(int codePoint)@b@  {@b@    return ((codePoint < 32) || (codePoint == 8232) || (codePoint == 8233) || ((codePoint >= 127) && (codePoint <= 159)));@b@  }@b@@b@  private static void appendHexJavaScriptRepresentation(int codePoint, Appendable out)@b@    throws IOException@b@  {@b@    if (Character.isSupplementaryCodePoint(codePoint))@b@    {@b@      char[] surrogates = Character.toChars(codePoint);@b@      appendHexJavaScriptRepresentation(surrogates[0], out);@b@      appendHexJavaScriptRepresentation(surrogates[1], out);@b@      return;@b@    }@b@    out.append("\\u").append(HEX_CHARS[(codePoint >>> 12 & 0xF)]).append(HEX_CHARS[(codePoint >>> 8 & 0xF)]).append(HEX_CHARS[(codePoint >>> 4 & 0xF)]).append(HEX_CHARS[(codePoint & 0xF)]);@b@  }@b@@b@  static@b@  {@b@    Set mandatoryEscapeSet = new HashSet();@b@    mandatoryEscapeSet.add(Character.valueOf('"'));@b@    mandatoryEscapeSet.add(Character.valueOf('\\'));@b@    JS_ESCAPE_CHARS = Collections.unmodifiableSet(mandatoryEscapeSet);@b@@b@    Set htmlEscapeSet = new HashSet();@b@    htmlEscapeSet.add(Character.valueOf('<'));@b@    htmlEscapeSet.add(Character.valueOf('>'));@b@    htmlEscapeSet.add(Character.valueOf('&'));@b@    htmlEscapeSet.add(Character.valueOf('='));@b@    htmlEscapeSet.add(Character.valueOf('\''));@b@@b@    HTML_ESCAPE_CHARS = Collections.unmodifiableSet(htmlEscapeSet);@b@  }@b@}