您的位置:首页 > 编程语言 > Java开发

Java格式化json格式文本数据

2016-08-26 22:30 567 查看
假设,我有这样的一串json字符串数据:

{"id":"1","name":"a1","obj":{"id":11,"name":"a11","array":[{"id":111,"name":"a111"},{"id":112,"name":"a112"}]}}

我希望能格式化成下面的文本:

{

    "id":"1",

    "name":"a1",

    "obj":{

        "id":11,

        "name":"a11",

        "array":[{

            "id":111,

            "name":"a111"

        },

        {

            "id":112,

            "name":"a112"

        }]

    }

}

那么问题就来了,我需要通过一些判断来插入【回车】、制表符(tab)或者4个空格;现在根据上面的字符串总结规律如下:

1、当遇到 '{' 时,在其后面追加【回车】和 tab或者4个空格

2、当遇到 ',' 在其后面追加回车

3、当遇到 '}' 在其前面追加【回车】和 tab或者4个空格

还有一个,就是根据格式化后的文本,我们需要判断追加多少次的tab或者4个空格;

实现代码如下:

MainTest.java

import com.gdite.jsontool.utils.JSONTool;

public class MainTest {
public static void main(String[] args) {
JSONTool tool = new JSONTool();
String jsonStr = "{\"id\":\"1\",\"name\":\"a1\",\"obj\":{\"id\":11,\"name\":\"a11\",\"array\":[{\"id\":111,\"name\":\"a111\"},{\"id\":112,\"name\":\"a112\"}]}}";
String fotmatStr = tool.stringToJSON(jsonStr);
System.out.println(fotmatStr);
}
}


JSONTool.java

public class JSONTool {

private boolean isTab = true;

public String stringToJSON(String strJson) {
// 计数tab的个数
int tabNum = 0;
StringBuffer jsonFormat = new StringBuffer();
int length = strJson.length();

for (int i = 0; i < length; i++) {
char c = strJson.charAt(i);
if (c == '{') {
tabNum++;
jsonFormat.append(c + "\n");
jsonFormat.append(getSpaceOrTab(tabNum));
} else if (c == '}') {
tabNum--;
jsonFormat.append("\n");
jsonFormat.append(getSpaceOrTab(tabNum));
jsonFormat.append(c);
} else if (c == ',') {
jsonFormat.append(c + "\n");
jsonFormat.append(getSpaceOrTab(tabNum));
} else {
jsonFormat.append(c);
}
}
return jsonFormat.toString();
}

// 是空格还是tab
public String getSpaceOrTab(int tabNum) {
StringBuffer sbTab = new StringBuffer();
for (int i = 0; i < tabNum; i++) {
if (isTab) {
sbTab.append('\t');
} else {
sbTab.append("    ");
}
}
return sbTab.toString();
}
}

结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息