List和Map集合json序列化
1.导入对应的json和commons的jar包
- commons-beanutils-1.7.0.jar
- commons-collections-3.2.jar
- commons-lang-2.3.jar
- ezmorph-1.0.3.jar
- json-lib-2.2.3-jdk15.jar
2.代码案例
一般来说,导入包后可以用JSONArray把List序列化
//从数据库中获取集合数据
List<Model> modelList = modelService.getRecordByModelower(ModelOwer);
JSONArray json = JSONArray.fromObject(modelList);
当然,有时候模型类里会有Data类型数据,而通过上面方法序列化后得到的日期会被分隔成年、月、日、时、分、秒等子对象。不符合我们的期望。
这时,我们就需要写一个好用的工具类了。
package com.zp.FzServer.Utils;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Created by ZP on 2019/4/6.
*/
public class JsonDateValueProcessor implements JsonValueProcessor {
private String format = "yyyy-MM-dd HH:mm:ss";
public JsonDateValueProcessor() {
super();
}
public JsonDateValueProcessor(String format) { // 自己需要的格式
super();
this.format = format;
}
private Object process(Object value) {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return process(o);
}
@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return process(o);
}
}
测试代码
@Test
public void testgetTaskByProvice(){
String province = "广西省";
List<Model> modelList = modelService.getTaskByProvice(province);
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONArray jsonArray = JSONArray.fromObject(modelList,jsonConfig);
System.out.println(jsonArray);
}
当然,我做项目时遇到过一个问题,就是当我用mybatis返回一个map集合时,时间转json格式用网上通用的map转json方法不管用,所以自己写了个比较笨的方法来解决这一问题。
package com.zp.FzServer.Utils;
import net.sf.json.JSONObject;
/**
* Created by ZP on 2019/4/11.
*/
public class JsonUtil {
/*
因为从mybatis里取出封装成Map的日期不是Data,故写此方法来封装json
*/
public static List listMapToJson(List<Map> mapList) {
List jsonList = new ArrayList();
for (Map map:mapList) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("{");
Iterator<String> iter = map.keySet().iterator();
while(iter.hasNext()) {
String key = iter.next();
String value = map.get(key).toString();
stringBuilder.append("\""+key+"\""+":"+"\""+value+"\"");
if (iter.hasNext()){
stringBuilder.append(",");
}
}
stringBuilder.append("}");
jsonList.add(stringBuilder);
}
return jsonList;
}
}
测试Map转json的用法
@Test
public void testMapToJson(){
String ModelOwer = "lin";
List<Map> mapList = taskPublishService.getListMapModel(ModelOwer);
System.out.println(mapList.toString());
List jsonList = JsonDateValueProcessor.listMapToJson(mapList);
System.out.println(jsonList.toString());
}