This commit is contained in:
jhx
2023-03-22 11:41:09 +08:00
parent d0dfc12286
commit f5efe88e4d
641 changed files with 505987 additions and 2 deletions
+289
View File
@@ -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';
//生成settergetter语句
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,属性定义,settergetter拼到一起,就是一个完整的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>');
}