将给定json用java代码表示
将给定json用java代码表示
例如给定json:
{
"name":"teclan",
"age":25
}
返回
JSONObject jsonObject=new JSONObject();
jsonObject.put("name","teclan");
jsonObject.put("age",25);
实现的代码如下
IdGenerater.java
:
package xxx;
import com.relops.snowflake.Snowflake;
/**
* Twitter的雪花算法SnowFlake,用来生成64位的ID
*
* @author dev
*
*/
public class IdGenerater {
private static int NODE = 1;
private static Snowflake SNOWFLAKE;
public static void init(int node) {
NODE=node;
SNOWFLAKE = new Snowflake(NODE);
}
public static synchronized String getNextId() {
return String.valueOf(getSnowflake().next());
}
public static Snowflake getSnowflake() {
if (SNOWFLAKE == null) {
SNOWFLAKE = new Snowflake(NODE);
}
return SNOWFLAKE;
}
}
Json2JavaCodeService.java
package xxx
import xxx
public class Json2JavaCodeService {
public String toJavaCode(JSONObject origin) {
if (isNull(origin)) {
return "给定json无效 ...";
}
if (!vaild(origin)) {
return "给定json格式错误 ...";
}
return traversing(origin);
}
public String traversing(JSONObject origin) {
StringBuilder sb = new StringBuilder();
String name=origin.getString("name");
JSONObject data=origin.getJSONObject("data");
sb.append(String.format("JSONObject %s = new JSONObject(); \n", name));
sb.append(getCode(name,data));
return sb.toString();
}
private String getCode(String name, JSONObject jsonObject) {
StringBuilder sb = new StringBuilder();
for(String key:jsonObject.keySet()) {
Object obj = jsonObject.get(key);
if(obj instanceof JSONArray) {
JSONArray array = jsonObject.getJSONArray(key);
String arrayKey = key+IdGenerater.getNextId();
sb.append(String.format("JSONArray %s = new JSONArray(); \n", arrayKey));
for(int i=0;i<array.size();i++) {
obj = array.get(i);
if(obj instanceof JSONObject) {
String keyName = key+"Json"+i;
sb.append(String.format("JSONObject %s = new JSONObject(); \n", keyName));
String code = getCode(keyName,(JSONObject)obj);
sb.append(code);
sb.append(String.format("%s.add(%s);\n", arrayKey,keyName));
}else {
sb.append(String.format("%s.add(\"%s\");\n", arrayKey,array.getString(i)));
}
}
sb.append(String.format("%s.put(\"%s\",%s);\n", name,key,arrayKey));
}else if(obj instanceof JSONObject) {
String keyName1 = key+IdGenerater.getNextId();
sb.append(String.format("JSONObject %s = new JSONObject(); \n", keyName1));
String code = getCode(keyName1,(JSONObject)obj);
sb.append(code);
String keyName2 = key+IdGenerater.getNextId();
sb.append(String.format("JSONObject %s = new JSONObject(); \n", keyName2));
sb.append(String.format("%s.put(\"%s\",%s);\n", keyName2,key,keyName1));
sb.append(String.format("%s.put(\"%s\",%s);\n", name,key,keyName1));
}else {
sb.append(String.format("%s.put(\"%s\",\"%s\");\n", name,key,jsonObject.get(key)));
}
}
return sb.toString();
}
private boolean vaild(JSONObject jsonObject) {
return jsonObject.containsKey("name") && jsonObject.containsKey("data");
}
private boolean isNull(JSONObject jsonObject) {
return jsonObject == null || jsonObject.isEmpty();
}
}