• Java后台 解析JSON的几个方法


    1.对象转JSON对象。

    public static void main(String[] args) {
    	Domain demo = new Domain(
    			"在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
    			"http://www.sojson.com/",
    			"提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。");
    	String objectToJSON = objectToJSON(demo);
    	System.out.println(objectToJSON);
    	
    }
    public static String objectToJSON(Domain demo) {
    	return JSONObject.fromObject(demo).toString();
    }
    /**
     * 结果输出:
     
     {
        "description": "提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。",
        "title": "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
        "url": "http://www.sojson.com/"
    }
     
     */
    

      

    2.Map<string,object>转JSON对象。

    public static void main(String[] args) {
    	Map map = new HashMap();
    	map.put("title", "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)");
    	map.put("url", "http://www.sojson.com/");
    	map.put("description", "提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。");
    	String objectToJSON = mapToJSON(map);
    	System.out.println(objectToJSON);
    	
    }
    public static String mapToJSON(Map map) {
    	return JSONObject.fromObject(map).toString();
    }
    /**
     * 结果输出:
     {
        "description": "提供json在线格式化,json在线格式化工具,json 格式化输出,json格式化 空串,json 格式化插件,json字符串格式化,json视图,json 在线验证,json 在线查看器。",
        "title": "在线JSON校验格式化工具 —SOJSON在线工具(sojson.com)",
        "url": "http://www.sojson.com/"
    }
     
     */
    

      

    3.对象和JSON之间的转换(JsonUtil)。

    package snippet;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import net.sf.ezmorph.object.DateMorpher;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsDateJsonValueProcessor;
    import net.sf.json.util.JSONUtils;
    
    public class JsonUtil {
    
    	/** 页面传至后台时,json数据在request的参数名称 */
    public final static String JSON_ATTRIBUTE = "json";
    public final static String JSON_ATTRIBUTE1 = "json1";
    public final static String JSON_ATTRIBUTE2 = "json2";
    public final static String JSON_ATTRIBUTE3 = "json3";
    public final static String JSON_ATTRIBUTE4 = "json4";
    
    /**
     * 从一个JSON 对象字符格式中得到一个java对象,形如: {"id" : idValue, "name" : nameValue,
     * "aBean" : {"aBeanId" : aBeanIdValue, ...}}
     * 
     * @param object
     * @param clazz
     * @return
     */
    public static Object getDTO(String jsonString, Class clazz) {
    	JSONObject jsonObject = null;
    	try {
    		setDataFormat2JAVA();
    		jsonObject = JSONObject.fromObject(jsonString);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	return JSONObject.toBean(jsonObject, clazz);
    }
    
    /**
     * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如: {"id" : idValue, "name" :
     * nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}, beansList:[{}, {},
     * ...]}
     * 
     * @param jsonString
     * @param clazz
     * @param map
     *            集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" :
     *            Bean.class)
     * @return
     */
    public static Object getDTO(String jsonString, Class clazz, Map map) {
    	JSONObject jsonObject = null;
    	try {
    		setDataFormat2JAVA();
    		jsonObject = JSONObject.fromObject(jsonString);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	return JSONObject.toBean(jsonObject, clazz, map);
    }
    
    /**
     * 从一个JSON数组得到一个java对象数组,形如: [{"id" : idValue, "name" : nameValue}, {"id" :
     * idValue, "name" : nameValue}, ...]
     * 
     * @param object
     * @param clazz
     * @return
     */
    public static Object[] getDTOArray(String jsonString, Class clazz) {
    	setDataFormat2JAVA();
    	JSONArray array = JSONArray.fromObject(jsonString);
    	Object[] obj = new Object[array.size()];
    	for (int i = 0; i < array.size(); i++) {
    		JSONObject jsonObject = array.getJSONObject(i);
    		obj[i] = JSONObject.toBean(jsonObject, clazz);
    	}
    	return obj;
    }
    
    /**
     * 从一个JSON数组得到一个java对象数组,形如: [{"id" : idValue, "name" : nameValue}, {"id" :
     * idValue, "name" : nameValue}, ...]
     * 
     * @param object
     * @param clazz
     * @param map
     * @return
     */
    public static Object[] getDTOArray(String jsonString, Class clazz, Map map) {
    	setDataFormat2JAVA();
    	JSONArray array = JSONArray.fromObject(jsonString);
    	Object[] obj = new Object[array.size()];
    	for (int i = 0; i < array.size(); i++) {
    		JSONObject jsonObject = array.getJSONObject(i);
    		obj[i] = JSONObject.toBean(jsonObject, clazz, map);
    	}
    	return obj;
    }
    
    /**
     * 从一个JSON数组得到一个java对象集合
     * 
     * @param object
     * @param clazz
     * @return
     */
    public static List getDTOList(String jsonString, Class clazz) {
    	setDataFormat2JAVA();
    	JSONArray array = JSONArray.fromObject(jsonString);
    	List list = new ArrayList();
    	for (Iterator iter = array.iterator(); iter.hasNext();) {
    		JSONObject jsonObject = (JSONObject) iter.next();
    		list.add(JSONObject.toBean(jsonObject, clazz));
    	}
    	return list;
    }
    
    /**
     * 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性
     * 
     * @param object
     * @param clazz
     * @param map
     *            集合属性的类型
     * @return
     */
    public static List getDTOList(String jsonString, Class clazz, Map map) {
    	setDataFormat2JAVA();
    	JSONArray array = JSONArray.fromObject(jsonString);
    	List list = new ArrayList();
    	for (Iterator iter = array.iterator(); iter.hasNext();) {
    		JSONObject jsonObject = (JSONObject) iter.next();
    		list.add(JSONObject.toBean(jsonObject, clazz, map));
    	}
    	return list;
    }
    
    /**
     * 从json HASH表达式中获取一个map,该map支持嵌套功能 形如:{"id" : "johncon", "name" : "小强"}
     * 注意commons
     * -collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap
     * 
     * @param object
     * @return
     */
    public static Map getMapFromJson(String jsonString) {
    	setDataFormat2JAVA();
    	JSONObject jsonObject = JSONObject.fromObject(jsonString);
    	Map map = new HashMap();
    	for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
    		String key = (String) iter.next();
    		map.put(key, jsonObject.get(key));
    	}
    	return map;
    }
    
    /**
     * 从json数组中得到相应java数组 json形如:["123", "456"]
     * 
     * @param jsonString
     * @return
     */
    public static Object[] getObjectArrayFromJson(String jsonString) {
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);
    	return jsonArray.toArray();
    }
    
    /**
     * 把数据对象转换成json字符串 DTO对象形如:{"id" : idValue, "name" : nameValue, ...}
     * 数组对象形如:[{}, {}, {}, ...] map对象形如:{key1 : {"id" : idValue, "name" :
     * nameValue, ...}, key2 : {}, ...}
     * 
     * @param object
     * @return
     */
    public static String getJSONString(Object object) throws Exception {
    	String jsonString = null;
    	// 日期值处理器
    	JsonConfig jsonConfig = new JsonConfig();
    	jsonConfig.registerJsonValueProcessor(java.util.Date.class,
    			new JsonDateValueProcessor());
    	if (object != null) {
    		if (object instanceof Collection || object instanceof Object[]) {
    			jsonString = JSONArray.fromObject(object, jsonConfig)
    					.toString();
    		} else {
    			jsonString = JSONObject.fromObject(object, jsonConfig)
    					.toString();
    		}
    	}
    	return jsonString == null ? "{}" : jsonString;
    }
    
    private static void setDataFormat2JAVA() {
    	// 设定日期转换格式
    	JSONUtils.getMorpherRegistry().registerMorpher(
    			new DateMorpher(new String[] { "yyyy-MM-dd",
    					"yyyy-MM-dd HH:mm:ss" }));
    }
    
    public static void main(String[] arg) throws Exception {
    	String s = "{status : 'success'}";
    	System.out.println(" object : " + JsonUtil.getJSONString(s));
    	}
    }
    

      

    4.日期处理类

    package snippet;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonValueProcessor;
    /*
     * @author www.sojson.com
     * 创建日期 2008-9-10
     * json日期值处理器
     */
    public class JsonDateValueProcessor implements JsonValueProcessor {
    	private String format = "yyyy-MM-dd HH:mm:ss";
    	public static void main(String[] args) {
    		// 三解析如下例子
    		String rowidString = "[{"kl_id":"2","kl_title":"Test date","kl_content":"Test date","kl_type":"1","id":"1"},{"kl_id":"2","kl_title":"Test","kl_content":"Test","kl_type":"1","id":"2"}]";
    		JSONArray array = JSONArray.fromObject(rowidString);
    		Object[] obj = new Object[array.size()];
    		for (int i = 0; i < array.size(); i++) {
    			JSONObject jsonObject = array.getJSONObject(i);
    			System.out.println(jsonObject.get("kl_id"));
    		}
    	}
    	public JsonDateValueProcessor() {
    	}
    	public JsonDateValueProcessor(String format) {
    		this.format = format;
    	}
    	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
    		return process(value, jsonConfig);
    	}
    	public Object processObjectValue(String key, Object value,
    			JsonConfig jsonConfig) {
    		return process(value, jsonConfig);
    	}
    	private Object process(Object value, JsonConfig jsonConfig) {
    		if (value instanceof Date) {
    			String str = new SimpleDateFormat(format).format((Date) value);
    			return str;
    		}
    		return value == null ? null : value.toString();
    	}
    	public String getFormat() {
    		return format;
    	}
    	public void setFormat(String format) {
    		this.format = format;
    	}
    }
    

      

    PS:

    public static void main(String[] args) {
    	//对于对象中有明确类型的对象属性,可不管;但对象中有集合属性的,由于类型不明确,所以要先明确类型:
    	String jsonString = request.getParameter("json");
    	//增加对象中的集合属性的类型以及对象元素中的对象属性的集合属性的类型
    	Map clazzMap = new HashMap();
    	//secondItems是FirstDTO里的集合属性
    	clazzMap.put("secondItems", SecondDTO.class);
    	//thirdItems是SecondDTO里的集合属性
    	clazzMap.put("thirdItems", ThirdDTO.class);
    	FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap); 
    }
    

      

  • 相关阅读:
    洛谷 P1032 字串变换
    map && multimap
    【转载】Pycharm调试高效,还是pdb调试高效? (在服务端)
    弱国无外交 弱国一定无外交吗
    [转发]Linux性能测试工具之Lmbench特性、安装及使用
    fedora21 桌面用户自动登录lightdm.conf -20190520 方法
    获取显卡硬件信息lspci -vnn | grep VGA -A 12
    mate桌面用户 root 自动登录lightdm.conf -20190520 方法【fedora 21】mate
    在线文本差异对比
    【科目三】机考 教练不出话 态度要好
  • 原文地址:https://www.cnblogs.com/charlypage/p/8849652.html
Copyright © 2020-2023  润新知