一个无聊的需求是需要在后台把一个树形结构拼成json字符串。记录一下这个过程:
把下面那张图的数据列表拼成这样的串:
{"children":[{"children":[{"children":[ ],"id":"4","name":"d","pid":"2"},{"children":[ ],"id":"5","name":"e","pid":"2"}],"id":"2","name":"b","pid":"1"},{"children":[{"children":[ ],"id":"6","name":"f","pid":"3"}],"id":"3","name":"c","pid":"1"}],"id":"1","name":"a","pid":""}
json在线格式化查看工具可以用:http://tool.lu/json/
说下代码实现,先写个VO:
public class T {
private String id;
private String pid;
private String name;
private List<T> children = new ArrayList<T>();
...get...set方法...
//开始拼json
T jsonT = new T();
Map<String, T> map = new HashMap<String, T>();
for (T t : list) {
map.put(t.getId(), t);
}
for (T t : list) {
if(!map.containsKey(t.getPid())) {
jsonT = t;
} else {
T pt = map.get(t.getPid());
pt.getChildren().add(t);
}
}
JSONObject json= JSONObject.fromObject(jsonT);
System.out.println(json.toString());
}
转换成json串有两种方式:
一、
json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
用这两个jar包转换:
JSONObject json= JSONObject.fromObject(jsonT);
System.out.println(json.toString());
二、
jackson-jaxrs-1.9.13.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
用jackson的包
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, rootVo);
bodyJson = new JSONObject(writer.toString());
第一种方式的jar包在maven库里面找不到,后面改用第二种,整个过程还是有坑啊。。
顺手记录一下,没啥用的一篇文章。