Java中List和Map集合json序列化

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());

	}

参考博客

java–List转换成json格式
Java笔记-JSONObject序列化包含Date类型数据的Java对象

你可能感兴趣的:(Java各种技能)