FastJson解析
1、阿里巴巴FastJson是一個Json處理工具包,包括「序列化」和「反序列化」兩部分,它具有以下特徵:
速度最快,測試代表,fastjson具備極快的性能,超越任其餘的Java Json parser。包括自稱最快的JackJson;
功能強大,徹底支持Java Bean、集合、Map、日期、Enum,支持範型,支持自省;無依賴,可以直接運行在Java SE 5.0以上版本;支持Android;開源 (Apache 2.0)
html
Fastjson API入口類是com.alibaba.fastjson.JSON,經常使用的序列化操做均可以在JSON類上的靜態方法直接完成。
public static final Object parse(String text); // 把JSON文本parse爲JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final T parseObject(String text, Class clazz); // 把JSON文本parse爲JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 將JavaBean序列化爲JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化爲帶格式的JSON文本
public static final Object toJSON(Object javaObject); 將JavaBean轉換爲JSONObject或者JSONArray。
2、FastJson解析JSON步驟
A、服務器端將數據轉換成json字符串
首先、服務器端項目要導入阿里巴巴的fastjson的jar包至builtPath路徑下(這些能夠到fastjson官網下載:http://code.alibabatech.com/wiki/display/FastJSON/Home-zh)
而後將數據轉爲json字符串,核心函數是:
public static String createJsonString(Object value)
{
String alibabaJson = JSON.toJSONString(value);
return alibabaJson;
}
B、客戶端將json字符串轉換爲相應的javaBean
首先客戶端也要導入fastjson的兩個jar包
一、客戶端獲取json字符串
public class HttpUtil
{
public static String getJsonContent(String urlStr)
{
try
{// 獲取HttpURLConnection鏈接對象
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 設置鏈接屬性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
// 獲取相應碼
int respCode = httpConn.getResponseCode();
if (respCode == 200)
{
return ConvertStream2Json(httpConn.getInputStream());
}
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
private static String ConvertStream2Json(InputStream inputStream)
{
String jsonStr = "";
// ByteArrayOutputStream至關於內存輸出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 將輸入流轉移到內存輸出流中
try
{
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)
{
out.write(buffer, 0, len);
}
// 將內存流轉換爲字符串
jsonStr = new String(out.toByteArray());
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonStr;
}
}
二、使用泛型獲取javaBean(核心函數)
public static T getPerson(String jsonString, Class cls) {
T t = null;
try {
t = JSON.parseObject(jsonString, cls);
} catch (Exception e) {
// TODO: handle exception
}
return t;
}
public static List getPersons(String jsonString, Class cls) {
List list = new ArrayList();
try {
list = JSON.parseArray(jsonString, cls);
} catch (Exception e) {
}
return list;
}
public static List> listKeyMaps(String jsonString) {
List> list = new ArrayList>();
try {
list = JSON.parseObject(jsonString,
new TypeReference>>() {
});
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
本文轉自http://blog.sina.com.cn/s/blog_7ffb8dd501013qas.html