Java 解析JSON,JSON-LIB jar包下載和使用。

JSON 2016-08-22 23:57:07 85320

這是我之前發布的一篇文章。發現在其他的地方下載不了相關的包。故再次整理了一下。

Java jar包下載:

Json-lib  的所有依賴Jar包單獨下載。

  1. commons-lang-2.5.jar:點擊下載commons-lang-2.5.jar
  2. commons-beanutils-1.8.0.jar:點擊下載commons-beanutils-1.8.0.jar
  3. commons-collections-3.2.jar:點擊下載commons-collections-3.2.1.jar
  4. commons-logging-1.1.1.jar:點擊下載commons-logging-1.1.1.jar
  5. ezmorph-1.0.6.jar:點擊下載ezmorph-1.0.6.jar
  6. JSON  工具在線解析:JSON在線工具

json-lib  的  maven  dependency 引入及Jar包下載:http://www.267332.tw/blog/101.html

代碼使用Demo:

1.對象轉JSON對象。

public static void main(String[] args) {
	Domain demo = new Domain(
			"在線JSON校驗格式化工具 —SOJSON在線工具(sojson.com)",
			"http://www.267332.tw/",
			"提供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.267332.tw/"
}
 
 */

2.Map轉JSON對象。

public static void main(String[] args) {
	Map map = new HashMap();
	map.put("title", "在線JSON校驗格式化工具 —SOJSON在線工具(sojson.com)");
	map.put("url", "http://www.267332.tw/");
	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.267332.tw/"
}
 
 */

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.267332.tw
 * 創建日期 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); 
}


版權所屬:SO JSON在線解析

原文地址:http://www.267332.tw/blog/20.html

轉載時必須以鏈接形式注明原始出處及本聲明。


附件下載:

備注:點擊文件名下載,附件源來自云端,只能在本站下載。復制下載鏈接無效。

本文主題:

如果本文對你有幫助,那么請你贊助我,讓我更有激情的寫下去,幫助更多的人。

關于作者
一個低調而悶騷的男人。
相關文章
最新文章
當我談 HTTP 時,我談些什么? 2295
新浪短鏈(t.cn)最新申請官方API的方法講解。 14026
QUIC / HTTP3 協議詳細分析講解 2032
恭喜那個做云存儲的七牛云完成 F 輪 10 億人民幣的融資,開啟新的云旅程 3013
Autojs怎么安全加密?Autojs在線加密工具注意事項。 5973
Java JSON 組件選型之 FastJson 為什么總有漏洞? 17444
使用七牛云存儲實現圖片API,自動刪除圖片方案合集 3464
神速ICP備案經驗分享,ICP備案居然一天就通過了 4674
百度加強推送URL鏈接,百度SEO強行推送鏈接JavaScript代碼案例講解。 4598
SOJSON 拓展服務器被DDos攻擊了一晚上,是如何解決的? 6188
最熱文章
蘋果電腦Mac怎么恢復出廠系統?蘋果系統怎么重裝系統? 490787
我為什么要選擇RabbitMQ ,RabbitMQ簡介,各種MQ選型對比 441992
最新MyEclipse8.5注冊碼,有效期到2020年 (已經更新) 391157
免費天氣API,全國天氣 JSON API接口,可以獲取五天的天氣預報 380767
Elasticsearch教程(四) elasticsearch head 插件安裝和使用 257451
Jackson 時間格式化,時間注解 @JsonFormat 用法、時差問題說明 227646
談談斐訊路由器劫持,你用斐訊路由器,你需要知道的事情 155899
Elasticsearch教程(一),全程直播(小白級別) 133659
Java 信任所有SSL證書,HTTPS請求拋錯,忽略證書請求完美解決 121527
Elasticsearch教程(五) elasticsearch Mapping的創建 106604
支付掃碼

所有贊助/開支都講公開明細,用于網站維護:贊助名單查看

查看我的收藏

正在加載... ...

广西十一选5开奖结