在请求网络数据时,经常发出或者接收到的数据都是一串字符串,非常影响阅读,接着就是打开网站,然后去网上格式化一下数据,太过麻烦。
1.格式化json数据
/**
* 格式化string json数据
* @param jsonStr json数据
* @return
*/
public static String
format(String jsonStr) {
int level =
0;
StringBuffer jsonForMatStr =
new StringBuffer()
;
for (
int i =
0; i < jsonStr.length()
; i++) {
char c = jsonStr.charAt(i)
;
if (level >
0 &&
'\n' == jsonForMatStr.charAt(jsonForMatStr.length() -
1)) {
jsonForMatStr.append(
getLevelStr(level))
;
}
switch (c) {
case '{':
case '[':
jsonForMatStr.append(c +
"\n")
;
level++
;
break;
case ',':
jsonForMatStr.append(c +
"\n")
;
break;
case '}':
case ']':
jsonForMatStr.append(
"\n")
;
level--
;
jsonForMatStr.append(
getLevelStr(level))
;
jsonForMatStr.append(c)
;
break;
default:
jsonForMatStr.append(c)
;
break;
}
}
return convertUnicode(jsonForMatStr.toString())
;
}
/**
* 生成tab符号
* @param level
* @return
*/
private static String
getLevelStr(
int level) {
StringBuffer levelStr =
new StringBuffer()
;
for (
int levelI =
0; levelI < level
; levelI++) {
levelStr.append(
"\t")
;
}
return levelStr.toString()
;
}
效果
格式化前:
格式化后:
2.unicode解码
/**
* 解码unicode
* @param ori
* @return
*/
public static String
convertUnicode(String ori) {
char aChar
;
int len = ori.length()
;
StringBuffer outBuffer =
new StringBuffer(len)
;
for (
int x =
0; x < len
; ) {
aChar = ori.charAt(x++)
;
if (aChar ==
'\\') {
aChar = ori.charAt(x++)
;
if (aChar ==
'u') {
// Read the xxxx
int value =
0;
for (
int i =
0; i <
4; i++) {
aChar = ori.charAt(x++)
;
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value <<
4) + aChar -
'0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value <<
4) +
10 + aChar -
'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value <<
4) +
10 + aChar -
'A';
break;
default:
throw new IllegalArgumentException(
"Malformed \\uxxxx encoding.")
;
}
}
outBuffer.append((
char) value)
;
}
else {
if (aChar ==
't')
aChar =
'\t';
else if (aChar ==
'r')
aChar =
'\r';
else if (aChar ==
'n')
aChar =
'\n';
else if (aChar ==
'f')
aChar =
'\f';
outBuffer.append(aChar)
;
}
}
else
outBuffer.append(aChar)
;
}
return outBuffer.toString()
;
}
效果同上图