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 <wbr>之FastJson解析 而後將數據轉爲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;
    }


字段別名
NameFilter filter = new NameFilter() {

@Override
public String process(Object arg0, String arg1, Object arg2) {
if ("remarkObject1".equals(arg1)){
return "warnPersonName";
}
return arg1;
}

};

return Result.success(JSON.toJSONString(map, filter));



一、字段名稱映射
好比如今JavaBean中有一個字段名稱爲parentId,想將此字段轉換爲pId,則可使用以下代碼。
NameFilter filter = new NameFilter() { 
 public String process(Object source, String name, Object value) {
 if (name.equals("parentId")) {
 return "pId";
 }

 return name;
 }

 };

 String jsonString = StringUtils.EMPTY;
 SerializeWriter out = new SerializeWriter();
 try {
 JSONSerializer serializer = new JSONSerializer(out);
 serializer.getNameFilters().add(filter);
 serializer.write(columns);//這裏的columns爲待轉換的對象
 jsonString = out.toString();
 } finally {
 out.close();
 }
二、去除JSON中的key值的引號
FastJSON中默認爲轉換後的JSON中的key值是帶引號的,有些特殊狀況或者組件須要不帶引號的,可使用下面的代碼將引號去掉。
在上面的代碼中添加下面的這行代碼,則能夠將轉換後的字段名稱的引號去掉。
serializer.config(SerializerFeature.QuoteFieldNames, false);
相關文章
相關標籤/搜索