最近要測試兩款json解析器的性能, 需要生成不同結(jié)構(gòu)的json, 上網(wǎng)看了下貌似沒有, 就花半天擼了一個, 寫個文章記錄下.
代碼在https://github.com/Mazexal/buildJson
核心代碼:
private static String buildObjectBase(int length,int depthlevel){
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("{");
for(int i=0;i<length;i++){
int num = getRandInt(5,20);
stringBuilder.append("\"");
stringBuilder.append(strBuild(num));
stringBuilder.append("\"");
num=getRandInt(5,20);
stringBuilder.append(":");
int choose=getRandInt(4,4);
int tmp = getRandInt(3,4);
if(depthlevel>5){
choose=5;
}
switch (choose){
case 0:
depthlevel =depthlevel+1;
stringBuilder.append(buildObjectBase(tmp,depthlevel+1));
break;
case 1:
depthlevel =depthlevel+1;
stringBuilder.append(buildArray(tmp,depthlevel+1));
break;
default:
stringBuilder.append("\"");
stringBuilder.append(strBuild(num));
stringBuilder.append("\"");
break;
}
if(i!=length-1){
stringBuilder.append(",");
}
}
stringBuilder.append("}");
return (stringBuilder.toString());
}
private static String buildArray( int depth,int depthlevel){
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("[");
for(int i=0;i<depth;i++){
int length = getRandInt(5,12);
stringBuilder.append(buildObjectBase(length,depthlevel+1));
if(i!=depth-1){
stringBuilder.append(",");
}
}
stringBuilder.append("]");
// stringBuilder.append(",");
return stringBuilder.toString();
}
采用遞歸調(diào)用, 可以自由生成不同的結(jié)構(gòu).