update
This commit is contained in:
@@ -0,0 +1,289 @@
|
||||
function trimStr(str) {
|
||||
return str.replace(/(^\s*)|(\s*$)/g, "");
|
||||
}
|
||||
|
||||
function isArray(o) {
|
||||
return Object.prototype.toString.call(o) === '[object Array]';
|
||||
}
|
||||
|
||||
function firstToUpperCase(str) {
|
||||
return str.substr(0, 1).toUpperCase() + str.substr(1);
|
||||
}
|
||||
|
||||
function camelCase(input) {
|
||||
return input.toLowerCase().replace(/_(.)/g, function (match, group1) {
|
||||
return group1.toUpperCase();
|
||||
});
|
||||
}
|
||||
|
||||
function camelCaseWithFirstCharUpper(input) {
|
||||
if (!input) { return "" };
|
||||
input = camelCase(input);
|
||||
return input[0].toUpperCase() + input.substr(1);
|
||||
}
|
||||
|
||||
function isDate(date) {
|
||||
return ((new Date(date) !== "Invalid Date" && !isNaN(new Date(date))) && isNaN((+date)));
|
||||
}
|
||||
|
||||
function isInt(n) {
|
||||
return n % 1 === 0;
|
||||
}
|
||||
|
||||
function currentYear() {
|
||||
return new Date().getFullYear()
|
||||
}
|
||||
|
||||
function currentTime() {
|
||||
var date = new Date();
|
||||
var seperator1 = "-";
|
||||
var seperator2 = ":";
|
||||
var month = date.getMonth() + 1;
|
||||
var strDate = date.getDate();
|
||||
if (month >= 1 && month <= 9) {
|
||||
month = "0" + month;
|
||||
}
|
||||
if (strDate >= 0 && strDate <= 9) {
|
||||
strDate = "0" + strDate;
|
||||
}
|
||||
var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
|
||||
+ " " + date.getHours() + seperator2 + date.getMinutes()
|
||||
+ seperator2 + date.getSeconds();
|
||||
return currentdate;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
var importMap = {
|
||||
'Date': 'java.util.Date',
|
||||
'List': 'java.util.List'
|
||||
}
|
||||
|
||||
/**
|
||||
* 把本程序定义的数据格式,转换为java bean文本
|
||||
* @param bean
|
||||
* @returns {string}
|
||||
*/
|
||||
function toBeanText(bean, packageName) {
|
||||
|
||||
var beanFields = bean.val;
|
||||
var className = bean.name;
|
||||
|
||||
var importText = "";
|
||||
var fieldText = "";
|
||||
var setterText = "";
|
||||
var typeSet = {};
|
||||
var shoudImportJackson = false;
|
||||
var tpl = " public void setA(T a) {\n \
|
||||
this.a = a;\n \
|
||||
}\n \
|
||||
public T getA() {\n \
|
||||
return a;\n \
|
||||
}\n\n";
|
||||
|
||||
//依次遍历每个属性
|
||||
for (key in beanFields) {
|
||||
|
||||
//如果存在下划线小写格式的属性名,要改成驼峰命名
|
||||
var camelKey = camelCase(key);
|
||||
if (camelKey != key) {
|
||||
//标准要用Jackson工具包做转换
|
||||
fieldText += ' @JsonProperty("' + key + '")\n';
|
||||
shoudImportJackson = true;
|
||||
}
|
||||
|
||||
//生成属性定义
|
||||
fieldText += " private " + beanFields[key] + " " + camelKey + ";\n";
|
||||
//记录属性类型,beanFields[key]可能有一些值,是List<Date>之类,要替换成Date
|
||||
var type = beanFields[key];
|
||||
if (type.indexOf("List<") > -1) {
|
||||
type = beanFields[key].replace('List<', "");
|
||||
type = type.replace('>', "");
|
||||
typeSet["List"] = 'true';
|
||||
}
|
||||
typeSet[type] = 'true';
|
||||
|
||||
//生成setter,getter语句
|
||||
var tplMap = {
|
||||
a: camelKey,
|
||||
A: firstToUpperCase(camelKey),
|
||||
T: beanFields[key]
|
||||
};
|
||||
setterText += tpl.replace(/a|A|T/g, function (matched) {
|
||||
return tplMap[matched];
|
||||
});
|
||||
|
||||
}
|
||||
//生成import语句
|
||||
for (t in typeSet) {
|
||||
if (importMap[t]) {
|
||||
importText += "import " + importMap[t] + ";\n";
|
||||
}
|
||||
}
|
||||
if (shoudImportJackson) {
|
||||
importText += "import org.codehaus.jackson.annotate.JsonIgnoreProperties;\nimport org.codehaus.jackson.annotate.JsonProperty;"
|
||||
}
|
||||
if (packageName) {
|
||||
importText = "\n" + "package " + packageName + ";\n" + importText;
|
||||
}
|
||||
|
||||
//把import,属性定义,setter,getter拼到一起,就是一个完整的java bean了
|
||||
var kk='p';kk+='c';kk+='j';kk+='s';kk+='o';kk+='n';
|
||||
return ''+importText + "\n" + "/**\n \
|
||||
* Auto-generated: " + currentTime() + "\n \
|
||||
*\n \
|
||||
* @author www."+kk+".com \n \
|
||||
* @website http://www."+kk+".com/json2java/ \n \
|
||||
*/\n" + "public class " + className + " {\n\n" + fieldText + setterText + "}"+'';
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析Json,返回json中包含的属性、属性类型
|
||||
* @param text
|
||||
* @returns {{}}
|
||||
*/
|
||||
function getBeanFieldFromJson(text, className) {
|
||||
|
||||
//1.先将文本转换成json实体
|
||||
var jsonObject = null;
|
||||
|
||||
//一些容错配置
|
||||
//把首尾空格去掉,那么如果第一和最后一个字符为[],说明是json数组,而非对象
|
||||
text = trimStr(text);
|
||||
|
||||
jsonlint.parse(text);
|
||||
if (text[0] === "[" && text[text.length - 1] === "]") {
|
||||
text = '{ "list": ' + text + '}';
|
||||
//如果是数组,则默认去数组第一个元素
|
||||
jsonObject = JSON.parse(text).list[0];
|
||||
} else {
|
||||
jsonObject = JSON.parse(text);
|
||||
}
|
||||
|
||||
//2.将json对象转换成bean类
|
||||
var bean = {};
|
||||
var attrClassAry = [];
|
||||
for (key in jsonObject) {
|
||||
var val = jsonObject[key];
|
||||
bean[key] = getTypeFromJsonVal(val, key, attrClassAry);
|
||||
}
|
||||
if (!className) {
|
||||
className = "AtoolBean";
|
||||
}
|
||||
else {
|
||||
// className = camelCaseWithFirstCharUpper(className);
|
||||
}
|
||||
bean = { name: className, val: bean };
|
||||
|
||||
|
||||
return $.merge([bean], attrClassAry);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 从json 属性值中判断该值的数据类型
|
||||
* @param val
|
||||
* @returns {string}
|
||||
*/
|
||||
function getTypeFromJsonVal(val, key, attrClassAry) {
|
||||
|
||||
//去掉空格,以避免一些无谓的转换错误
|
||||
if (val && val.replace) {
|
||||
val = val.replace(/ /g, "");
|
||||
}
|
||||
var typeofStr = typeof (val);
|
||||
if (typeofStr === 'number') {
|
||||
if (isInt(val)) {
|
||||
return "int";
|
||||
} else {
|
||||
return "double";
|
||||
}
|
||||
} else if (typeofStr === 'boolean') {
|
||||
return typeofStr;
|
||||
} else if (isDate(val)) {
|
||||
return "Date";
|
||||
} else if (!val) {
|
||||
return "String";
|
||||
}
|
||||
else if (typeofStr === 'string') {
|
||||
return "String";
|
||||
} else {
|
||||
if (isArray(val)) {
|
||||
var type = getTypeFromJsonVal(val[0], key, attrClassAry);
|
||||
return "List<" + type + ">";
|
||||
} else {
|
||||
//会走到这里,说明属性值是个json,说明属性类型是个自定义类
|
||||
var typeName = camelCaseWithFirstCharUpper(key);
|
||||
var bean = {};
|
||||
for (key in val) {
|
||||
var fieldValue = val[key];
|
||||
bean[key] = getTypeFromJsonVal(fieldValue, key, attrClassAry);
|
||||
}
|
||||
attrClassAry.push({ name: typeName, val: bean });
|
||||
return typeName;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
function download_zip() {
|
||||
var kk='P';kk+='c';kk+='j';kk+='s';kk+='o';kk+='n';
|
||||
var package_name = $('#package_name').val();
|
||||
var zip = new JSZip();
|
||||
var code = zip.folder(package_name.replace(/\./g, "/"));
|
||||
|
||||
$('.result_row .result').each(function () {
|
||||
code.file($(this).attr('class_name') + '.java', $(this).val());
|
||||
});
|
||||
var content = zip.generate({ type: "blob" });
|
||||
//var objDate = new Date();
|
||||
//var date = objDate.getSeconds();
|
||||
var date='';
|
||||
saveAs(content, kk+".com.beans" + date + ".zip");
|
||||
}
|
||||
function gen() {
|
||||
try {
|
||||
$("#result-list .result_row").remove();
|
||||
$('#·').text('');
|
||||
|
||||
var class_name = $('#class_name').val();
|
||||
var package_name = $('#package_name').val();
|
||||
//获取要解析的文本及文本类型
|
||||
var text = $('#json_content').val();
|
||||
if (text != '') {
|
||||
var beans = getBeanFieldFromJson(text, class_name);
|
||||
//把本程序定义的数据格式转换为文本
|
||||
$.each(beans, function (i, v) {
|
||||
var beanText = toBeanText(v, package_name);
|
||||
var textCss = "";
|
||||
if (i != 0) {
|
||||
textCss = "small-text";
|
||||
}
|
||||
|
||||
var html = '<div class="row result_row">' + "<span class=\"greentag\">类名:" + v.name + "</span>" + "<br>" + '<pre style="max-height:500px;"><code class="java">' + beanText + '</code></pre></div>';
|
||||
|
||||
$("#result-list").append(html);
|
||||
})
|
||||
$('#resule_text').html('<div class="alert alert-success" style="max-width: 99%;">成功生成JavaBean代码!</div>');
|
||||
}
|
||||
else {
|
||||
$('#json_content').select();
|
||||
$('#resule_text').html('<div class="alert alert-danger" style="max-width: 99%;">请贴入要生成JavaBean的Json代码</div>');
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
var tip = "";
|
||||
if (err.message.indexOf("Parse error on line") != -1) {
|
||||
tip = err.message;
|
||||
}
|
||||
else {
|
||||
tip = "parse error,makesure the json is right";
|
||||
}
|
||||
$('#resule_text').html('<div class="alert alert-danger" style="max-width: 99%;">' + tip + '</div>');
|
||||
}
|
||||
}
|
||||
function empty() {
|
||||
$("#json_content").val("");
|
||||
$('#json_content').select();
|
||||
$('#resule_text').html('<div class="alert alert-danger" style="max-width: 99%;">请贴入要生成JavaBean的Json代码</div>');
|
||||
}
|
||||
Reference in New Issue
Block a user