`
larlf
  • 浏览: 107701 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Bean和JSON相互转换的思路

阅读更多
打算在新的AJAX实现中用JSON做为数据传递的格式,看了JSON的资料,很合我意,结构简单,冗余数据少,在JavaScript中使用方便。但是看了相关的Project,没有找到一个在Java Bean和JSON之间转换的好工具。在这方面,Xtream做的算是不错的了,但是和我的希望还是有点差距,而且也不想因为这为这个原因就把Xtream这套庞大的东西都加到我的架构中去,必竟,我的一向的原则是:简单就是美。

于是写了一个Utils类,来实现我的这个想法,代码还没有完全实现,基本的用法在这里描述一下。

从Bean到JSON的过程:

BeanA a=new BeanA();
a.setName("Seally");
a.setSex("女");
a.setAge(25);
a.getList().add("one");
a.getList().add("two");
a.getList().add("three");
a.setArray(new String[]{"111","222","333"});

BeanB b=new BeanB();
b.setName("Larlf");
b.setIarray(new int[]{7,8,9,10});
a.setObj(b);

log.debug(JsonUtils.object2JsonString(a));
最后的结果会输出JSON字符串:

{"sex":"女","name":"Seally","age":25,"class":"com.opesoft.tools.BeanA","obj":{"iarray":[7,8,9,10],"name":"Larlf","class":"com.opesoft.tools.BeanB"},"list":["one","two","three"],"array":["111","222","333"]}


最后的字符串中会把Bean的Class生成为一个属性,这点在反向转换时起着重要作用。Array和Collection属性没有生成对应的Class,因为这部分信息可以通过反射的方法从对象中取出。Object属性就要有Class,因为很可能反射取出的是接口或父类,这里一定要把具体对象的类型保留下来。

反向生成对象代码如下:

String str2="{\"sex\":\"女\",\"name\":\"Seally\",\"age\":25,\"class\":\"com.opesoft.tools.BeanA\",\"obj\":{\"iarray\":[7,8,9,10],\"name\":\"Larlf\",\"class\":\"com.opesoft.tools.BeanB\"},\"list\":[\"one\",\"two\",\"three\"],\"array\":[\"111\",\"222\",\"333\"]}";
JSONObject json2=new JSONObject(str2);
BeanA bean2=(BeanA)JsonUtils.json2Object(json2);
log.debug(((BeanB)bean2.getObj()).getName());[\code]

从输出的信息可以看到根据JSON字符串重新构建出了对象。

111


这个工具类的思路基本如此,实现上还不是很完善,比如说对Collection属性的支持还不好,多维数组当前也不支持。最近几天我会把它的功能给补充完整,有了一个可用的版本就把原代码给发布上来。




分享到:
评论
6 楼 larlf 2015-10-12  
没想到多年前的文章还有人回复,从前这个架构里的数据转换部分早已经改为使用gson了,感谢关注!
5 楼 wzwahl36 2015-10-07  
Json在线转Javabean工具 http://www.atool.org/json2javabean.php
4 楼 dwangel 2009-07-29  
   1. class MyBean{ 
   2.    private List data; 
   3.    // getters & setters 
   4. } 
   5.  
   6. class Person{ 
   7.    private String name; 
   8.    // getters & setters 
   9. } 
  10.  
  11. ... 
  12.  
  13. String json = "{'data':[{'name':'Wallace'},{'name':'Grommit'}]}"; 
  14. Map classMap = new HashMap(); 
  15. classMap.put( "data", Person.class ); 
  16. MyBean bean = JSONObject.toBean( JSONObject.fromObject(json), MyBean.class, classMap ); 
3 楼 birdjavaeye 2007-10-25  
还有很重要的一点要处理:
BeanA a = new BeanA();
BeanB b = new BeanB();
a.setWife(b);
b.setHusband(a);

这样的情况类似hibernate中的many to one以及双向关联,要能正确处理:
BeanA a2 = (BeanA)JsonUtils.json2Object(JsonUtils.object2JsonString(a));
assertSame(a2, a2.getWife().getHusband());

如果采用JSON作字符串格式,这方面相当不好处理
你可以看一下Objot、PHPRPC、Buffalo的源码,都抛弃了JSON,才能快速方便地处理这种情况
2 楼 larlf 2007-06-26  
和JSON-Lib不同的地方在于,我希望如果对象A转换成Json字符串,通过这个字符串还能还原出对象A来,而不是像JSON-Lib那样还原后是一个MorphDynaBean对象。
1 楼 pzhifeng 2007-06-19  

JSONObject.fromBean();

JSONObject.toBean();

这两个方法不能满足你所提的要求吗?

相关推荐

    java bean 转为JSON

    在Java开发中,将Java Bean转换为JSON对象是一项常见的任务,特别是在处理前后端交互时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Java Bean则...

    Java bean转换为Json Schema

    Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...

    JAVA-JSON工具转换类

    总的来说,`JAVA-JSON工具转换类`这个主题涵盖了JSON数据处理的核心部分,包括JSON的序列化和反序列化,以及数据类型的转换。通过`json-lib`和`ezmorph`这两个库,开发者可以轻松地在Java程序中处理JSON数据,而`...

    bean2json_v20200515.zip

    在Java开发中,将Bean对象转换为JSON格式的数据是一项常见的任务,这有助于数据的传输、存储和展示。这里我们讨论的"bean2json_v20200515.zip"是一个工具,它能帮助开发者将Java Bean对象快速地转换为JSON字符串。这...

    gson和jsonBean解析json案例

    在Java开发中,处理JSON数据是一项常见的任务,而Gson和JsonBean是两个常用的库,用于将Java对象转换为JSON格式以及将JSON字符串反序列化为Java对象。本篇文章将详细探讨这两个库的使用方法,并通过一个具体的案例来...

    BeanToJsonSchema:Java bean转换为Json Schema

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

    Java Bean对象和Map相互转换.zip

    首先,Fastjson是阿里巴巴开源的一个高性能的JSON库,它不仅支持JSON到Java对象的解析和序列化,还提供了方便的Java Bean到JSON以及JSON到Java Bean的转换功能。 1. **Fastjson进行Java Bean到Map的转换**: 使用...

    拷贝JSON对象值进Java Bean对象

    为了将JSON转换为Java Bean,我们需要编写一个转换方法,如下: ```java import org.json.JSONObject; import java.lang.reflect.Method; public class JsonUtil { public static <T> T jsonToObject(JSONObject ...

    json和bean转换

    在Java开发中,经常需要将JSON字符串转换为Java Bean对象,反之亦然,以便于数据的序列化和反序列化。这篇博客(虽然链接无法在此提供)可能探讨了这个过程以及相关的工具和源码实现。 JSON是一种轻量级的数据交换...

    java Bean与json对象间的转换实例讲解

    在Java开发中,Java Bean和JSON对象之间的转换是常见的数据处理操作,特别是在处理网络请求和响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成...

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

    在"JsonDemo"这个示例中,可能包含了使用Java进行XML、JSON转换的代码实例,可能涵盖了上述提到的一些方法。通过阅读和学习这些代码,开发者可以更好地理解并掌握这些转换技巧,从而在实际项目中更加高效地处理数据...

    JSON 转BEAN 工具包

    将JSON转换为BEAN或者反之,是为了方便数据的处理和存储。在Java开发中,自定义JSON转BEAN工具包可以提高开发效率,避免频繁地手动编写转换代码。下面我们将详细探讨JSON与BEAN之间的转换以及如何构建这样的工具包。...

    bean,json工具类

    1. **Bean到JSON转换**:工具类提供了将Java Bean对象转换为JSON字符串的方法。这通常通过使用如Jackson、Gson或Fastjson等库来实现。例如,使用Jackson库,可以调用`ObjectMapper.writeValueAsString(Object bean)`...

    java代码实现完成json转bean类

    原生的java代码,用java代码实现json转换成java类bean对象,生成文件在当前类的同级目录

    为了高效地将Json对象转化成Java bean对象,传统上我们是在运行是利用反射来实现.zip

    在JSON与Java Bean之间进行转换,可以让我们在前后端之间方便地传递和处理数据。 传统的做法是利用Java的反射API(Reflection API)来实现这种转换。反射允许我们在运行时检查类、接口、字段和方法的信息,并且能够...

    Java中使用Json的net.sf.json包

    总结来说,`net.sf.json`包是Java中处理JSON数据的一个强大工具,它提供了丰富的API来创建、操作和转换JSON对象,同时依赖于Apache Commons系列库以增强其功能。通过熟练掌握这个库,开发者可以更高效地进行JSON相关...

    java-任何类型转换成json数据格式

    - `bean2json(Object bean)`:用于处理Java Bean对象,即具有getter和setter方法的标准Java对象。 - `list2json(List<?> list)`:用于处理`List`类型的对象。 - `array2json(Object[] array)`:用于处理数组对象。 -...

    批量转换json到java类工具

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

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    本文将详细介绍如何将JSON字符串直接转换为Java对象,特别是涉及到多层List集合的情况。在本例中,我们将使用`net.sf.json.JSONObject`类来实现这一功能。 首先,确保你的项目中已经引入了必要的库。在使用`...

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

    将 JSON 数据转换成 Java Bean 不仅能够简化数据处理逻辑,还能够更好地管理和维护代码。本文将详细介绍如何实现这一转换,并提供实际案例代码。 #### 二、准备工作 在进行 JSON 数据与 Java Bean 的转换之前,...

Global site tag (gtag.js) - Google Analytics