将给定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();
	}

}