`
hatrim
  • 浏览: 3494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

公布一个Bean和Json互转的Java代码生成器

阅读更多

因为我们的业务中很多地方使用JSON作为数据交换的格式,之前对比过Java 中各个JSON组件,使用JSONObject的方式效率最高,但是也是最麻烦的,因为要自己手动写Bean和Json数据的转换代码。为了偷懒,自己写 了一个生成转换代码的程序,虽然很简单,但是很实用。下面贴出核心的代码生成方法:

public class MethodCallBIZ {

public static String getValue(Object obj, String name) throws Exception {

PropertyDescriptor pd = new PropertyDescriptor(name, obj.getClass());
Method rM = pd.getReadMethod();// 获得读方法

Object ret = rM.invoke(obj);
if (ret == null) {
return null;
}

return ret.toString();
}

public static void setValue(Object obj, String name, String value)
throws Exception {
PropertyDescriptor pd = new PropertyDescriptor(name, obj.getClass());
Method wM = pd.getWriteMethod();
wM.invoke(obj, value);
}

public static String codeBean(Class clazz) {
StringBuffer code = new StringBuffer();

String clzName = clazz.getName();
clzName = clzName.substring(clzName.lastIndexOf(".") + 1);
for (Field f : clazz.getDeclaredFields()) {
String name = f.getName();
if (!name.matches("[a-z][^_]*")) {
continue;
}

code.append("\r\nprivate static String n_" + name + " = \"" + name
+ "\";");
}

code.append("\r\n\r\n\r\n");
// toJsonObject
code.append("\r\npublic static JSONObject toJsonObject(" + clzName
+ " obj) {");
code.append("\r\n\ttry {");
code.append("\r\n\t\tJSONObject jObj = new JSONObject();");
for (Field f : clazz.getDeclaredFields()) {
String name = f.getName();
if (!name.matches("[a-z][^_]*")) {
continue;
}
String type = f.getType().toString();
type = type.substring(type.lastIndexOf(".") + 1);
if ("Date".equals(type)) {
code.append("\r\n\t\tjObj.put(n_" + name + ", obj.get"
+ upperFirst(name) + "().getTime());");
} else {
code.append("\r\n\t\tjObj.put(n_" + name + ", obj.get"
+ upperFirst(name) + "());");
}
}
code.append("\r\n\t\treturn jObj;");
code.append("\r\n\t} catch (Exception ex) {");
code.append("\r\n\t}");
code.append("\r\n\treturn null;");
code.append("\r\n}");

code.append("\r\n\r\n");
// toJsonList
code.append("\r\npublic static String toJsonList(List<" + clzName
+ "> list) {");
code.append("\r\n\tJSONArray array = new JSONArray();");
code.append("\r\n\tfor (" + clzName + " obj : list) {");
code.append("\r\n\t\tarray.put(toJsonObject(obj));");
code.append("\r\n\t}");
code.append("\r\n\treturn array.toString();");
code.append("\r\n}");

code.append("\r\n\r\n");
// toJson
code.append("\r\npublic static String toJson(" + clzName + " obj) {");
code.append("\r\n\tJSONObject jObj = toJsonObject(obj);");
code.append("\r\n\tif (jObj != null) {");
code.append("\r\n\t\treturn jObj.toString();");
code.append("\r\n\t}");
code.append("\r\n\treturn null;");
code.append("\r\n}");

code.append("\r\n\r\n");
// fromJsonObject
code.append("\r\npublic static " + clzName
+ " fromJsonObject(JSONObject jObj) {");
code.append("\r\n\t" + clzName + " obj = null;");
code.append("\r\n\ttry {");
code.append("\r\n\t\tobj = new " + clzName + "();");
for (Field f : clazz.getDeclaredFields()) {
String name = f.getName();
if (!name.matches("[a-z][^_]*")) {
continue;
}
code.append("\r\n\t\tif (!jObj.isNull(n_" + name + ")) {");
String type = f.getType().toString();
type = type.substring(type.lastIndexOf(".") + 1);
if ("Integer".equals(type)) {
type = "Int";
}
if ("Date".equals(type)) {
code.append("\r\n\t\t\tobj.set" + upperFirst(name)
+ "(new Date(jObj.getLong(n_" + name + ")));");
} else {
code.append("\r\n\t\t\tobj.set" + upperFirst(name)
+ "(jObj.get" + type + "(n_" + name + "));");
}
code.append("\r\n\t\t}");
}
code.append("\r\n\t} catch (Exception ex) {");
code.append("\r\n\t}");
code.append("\r\n\treturn obj;");
code.append("\r\n}");

code.append("\r\n\r\n");
// fromJsonList
code.append("\r\npublic static List<" + clzName
+ "> fromJsonList(String json) {");
code.append("\r\n\tList<" + clzName + "> list = new ArrayList<"
+ clzName + ">();");
code.append("\r\n\ttry {");
code.append("\r\n\t\tJSONArray array = new JSONArray(json);");
code.append("\r\n\t\tfor (int i = 0; i < array.length(); i++) {");
code.append("\r\n\t\t\tJSONObject jObj = array.getJSONObject(i);");
code.append("\r\n\t\t\tif (jObj != null) {");
code.append("\r\n\t\t\t\tlist.add(fromJsonObject(jObj));");
code.append("\r\n\t\t\t}");
code.append("\r\n\t\t}");
code.append("\r\n\t} catch (Exception ex) {");
code.append("\r\n\t}");
code.append("\r\n\treturn list;");
code.append("\r\n}");

code.append("\r\n\r\n");
// fromJson
code.append("\r\npublic static " + clzName + " fromJson(String json) {");
code.append("\r\n\ttry {");
code.append("\r\n\t\tJSONObject jObj = new JSONObject(json);");
code.append("\r\n\t\treturn fromJsonObject(jObj);");
code.append("\r\n\t} catch (Exception ex) {");
code.append("\r\n\t}");
code.append("\r\n\treturn null;");
code.append("\r\n}");

return code.toString();
}

private static String upperFirst(String name) {
String first = name.substring(0, 1);
String others = name.substring(1);

return first.toUpperCase() + others;
}

public static String toJson(Object obj, String name) throws Exception {

PropertyDescriptor pd = new PropertyDescriptor(name, obj.getClass());
Method rM = pd.getReadMethod();// 获得读方法

Object ret = rM.invoke(obj);
if (ret == null) {
return null;
}

return ret.toString();
}
}

调用codeBean方法即可生成代码,生成出来的内容为代码片段,只要加入到Bean中,即可以调用相应方法进行Bean和Json互相转换了。

调用示例:

// 要添加序列化代码的类
UserAccount obj = new UserAccount();
System.out.println(MethodCallBIZ.codeBean(obj.getClass()));

分享到:
评论

相关推荐

    Java bean转换为Json Schema

    Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO(Plain Old Java Object),通常包含私有属性、公有的getter和setter方法以及无参构造函数。而Json Schema则是一种JSON格式的规范,用于定义JSON数据...

    java bean 转为JSON

    总之,将Java Bean转换为JSON是Java开发中的一个基础操作,通过引入合适的库如Jackson,可以轻松实现这一功能。同时,理解JSON和Java Bean之间的关系对于前后端数据交换至关重要。在实际项目中,根据需求选择适合的...

    根据json串自动生成JAVA BEAN工具

    在处理大量JSON数据时,手动创建对应的JavaBean类会非常耗时,因此出现了“根据json串自动生成JAVA BEAN工具”。 这类工具的主要功能是解析JSON字符串,并自动生成符合Java Bean规范的类,这样开发者就可以方便地将...

    json-schema-bean-generator:JSON Schema 的 Java 代码生成器

    JSON 模式 Bean 生成器 从提供的 JSON Schema 对象生成 Java Beans(最终以各种形式)的生成器。 目标 可定制的类型映射 多种输出格式(POJO、AutoBeans 等) 生成的代码是人类“可读的”

    json和bean转换

    而工具方面,有一些自动化工具可以帮助生成Java Bean类,如JSON to Java Bean在线转换器,可以输入JSON字符串自动生成对应的Java Bean源码,这样可以减少手动编码的工作。 在实际项目中,处理大量复杂JSON数据时,...

    批量转换json到java类工具

    将json转换为javebean的工具,封装jsonschema2pojo,用户可以修改配置文件json2Beans.json,然后运行Json2JavaBean2.bat直接生成对应类。 能够批量转换json为bean,直接拷贝到项目中使用。 提醒: 需要提前安装java...

    bean2json_v20200515.zip

    总结来说,"bean2json_v20200515.zip"是一个轻量级的Java工具,用于快速将简单的Java Bean对象转换为JSON字符串,适合简单的测试和调试场景。在实际开发中,根据需求的复杂性,可能需要更强大的库来满足所有需求。...

    bean,json工具类

    Bean对象是Java编程中的一个核心概念,它代表了具有特定属性和方法的对象,通常用于数据存储和传输。而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成...

    JSON转JAVA & C# 转换工具.rar

    标题“JSON转JAVA & C# 转换工具.rar”指的是一个包含两个不同语言环境下的JSON转换工具的压缩包,目的是帮助开发者快速地将JSON格式的数据转换为对应的Java或C#实体类。 描述中提到的“绝对好用的工具”,暗示了这...

    BeanToJsonSchema:Java bean转换为Json Schema

    `BeanToJsonSchema`项目正是为了解决这个问题,它提供了一个功能,能够将Java Bean对象转换成对应的JSON Schema,以便于在JSON数据交换和验证中使用。 JSON Schema的核心特性包括但不限于: 1. **数据类型**:JSON...

    XML、JAVA、JSON多种方式互相转换

    在IT行业中,特别是在Web服务、API设计以及客户端和服务器之间的数据传输中,XML和JSON的转换是一个常见的需求。Java作为一种多用途的编程语言,提供了多种库和方法来实现这些格式间的转换。下面我们将详细探讨XML、...

    android json解析代码生成器

    通过编写配置文件,该代码生成器能自动生成相应的bean,和解析json的代码。 你需要做的是,有一个ruby环境,将配置文件写在test.conf中,然后shell的重定向即可。 如生成Bean文件: ruby BeanGen.rb &gt; Bean.java 生成...

    Json一键转Javabean工具

    "Json一键转Javabean工具"是一个实用的开发辅助工具,它能够帮助Java开发者快速地将JSON格式的数据转换成对应的JavaBean对象,极大地提高了开发效率。 JSON转换为JavaBean的过程通常包括以下步骤: 1. **解析JSON...

    详解json string转换为java bean及实例代码.docx

    接下来,我们定义一个 Java Bean 类来表示 JSON 数据。这里以 `ESMetaDataInfoIndex` 类为例: ```java package test.fastjson; import java.util.HashMap; import java.util.Map; import org.codehaus.jackson....

    Java代码实现Map和Object互转及Map和Json互转

    总结一下,Map和Object互转以及Map和JSON互转是Java Web开发中常见的需求。前者可以通过反射、Apache Commons BeanUtils或者Introspector类来实现,而后者则可以使用专门的JSON处理库如Gson、Jackson或Fastjson。...

    Json转JavaBean小工具

    json转javabean的一个工具,只要输入类名和合法的json格式就会在当前文件夹下生成java文档,操作时图形界面的,纯java编写可以跨平台操作。

    java 代码自动生成

    代码生成工具可以自动根据数据库表字段生成对应的Java类,包含属性、getter/setter方法,甚至包括ToMap、ToJson等便捷转换方法。 4. XML配置: 在传统的Spring框架中,XML配置文件用于定义bean之间的依赖关系以及...

    JAVA操作JSON全套包,无需另外下载一次搞定

    1. **json-lib-2.2.3-jdk15.jar**:这是Json-lib库的一个版本,它是一个Java JSON处理器,支持多种Java集合和类型,如Map、List、Bean等与JSON之间的转换。通过Json-lib,你可以方便地将Java对象转换为JSON字符串,...

    JavaBean与JsonString的相互转换

    如果JsonString代表一个JsonArray,我们也可以将其转换为Java的集合类型,如List或ArrayList。以Jackson为例: ```java // 假设我们有一个JsonArray字符串 String jsonArrayString = "[{\"name\":\"John\"}, {\...

    json、post请求、freemarker模拟生成sql、wsdl2Java生成客户代码

    Wsdl2Java工具是Apache CXF框架的一部分,它用于从WSDL(Web Services Description Language)文件生成Java客户端和服务端代码。WSDL是描述Web服务的XML文档,包含了服务的接口定义、消息格式、地址等信息。使用Wsdl...

Global site tag (gtag.js) - Google Analytics