一、遇到的问题
在实际的web程序,特别是后台程序,经常需要将批量数据保存到数据库,这样就会涉及到将前端页面的数据转化为java对象的问题。
1、对于简单的批量数据,比如说多个类目ID,就以逗号分隔的多个id的字符串就好了,这里不予讨论
2、对于复杂结构的批量数据,比如一批产品的信息,通常是使用json字符串传到后台,通过json-lib.jar来转换成java对象。
3、这里主要讨论要保存的是批量的复杂对象且每个复杂对象里还嵌套有复杂对象的情况。
二、解决方案示例
1、有两个实体,classA,classB定义如下:
public class A {
private Long id;
private String name;
private Integer status;
private String desc;
private List listB;
}
public class B {
private Long id;
private String name;
private Integer status;
private String desc;
}
2、如果要在html页面保存一批数据,这批数据转化为java对象就是一个List<A>,且其中每一个A中还有一个list<B>,则需要在页面拼装如下的一个字符串传入web服务器端
jsonString = "[{'id':11,'name':'A1','status':1,'desc':'hello A1!',listB:[
{'id':21,'name':'B1','status':1,'desc':'hello B1!'},
{'id':22,'name':'B2','status':1,'desc':'hello B2!'}]},
{'id':12,'name':'A1','status':1,'desc':'hello A2!',listB:[
{'id':23,'name':'B3','status':1,'desc':'hello B3!'},
{'id':24,'name':'B4','status':1,'desc':'hello B4!'}]}]";
3、java端用一个字符串jsonString 接收后,通过json-lib.jar转化为一个List<A>的代码如下:
Map classMap = new HashMap();
classMap.put("listB",B.class);
List<A> listA = JSONArray.toList(JSONArray.fromObject(selectPurJson), A.class, classMap);
这里最主要的就是通过一个map指明嵌套的复杂对象所属的类型,来对json字符串转化为java对象进行提示。如 classMap.put("listB",B.class); 的意思是:要转化成的目标java对象A中有一个字段listB的类型是 B.class
三、json-lib的maven路径(一般web程序里都有这个jar)
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>