json lib 學習總結

json lib 學習總結

準備工作:
導入jar包,以下是 json lib 必須的架包

commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar

使用技巧:
  1. 將對象轉換成 Json字符串

    //利用json-lib來將普通java對象轉換爲json字符串

    @Test
    public void testJavabean(){
    Users user=new Users(1L,"張三",true,28,"黑龍江齊齊哈爾人");

    JSONObject jsonObj=JSONObject.fromObject(dept);

    System.out.println(jsonObj);
    }


  2. 將數組轉換成字符串

    // 用 JSONArray 轉換集合,數組

    @Test
    public void testJSONArray(){
    List<Users> users=new ArrayList<Users>();
    Users user=new Users(1L,"張三",true,28,"黑龍江齊齊哈爾");
    Users user1=new Users(2L,"張四",true,20,"山東濟寧梁山");
    Users user2=new Users(3L,"張王妹",false,18,"湖北十堰武當山");
    users.add(user);
    users.add(user1);
    users.add(user2);

    JSONArray jsonArr=JSONArray.fromObject(users);
    System.out.println(jsonArr);

    }


  3. 利用jsonConfig選擇性輸出

    <!-- setExcludes用於排除某些屬性, -->

    @Test
    public void testFindById(){
    List<Users> users=new ArrayList<Users>();
    Users user=new Users(1L,"張三",true,28,"黑龍江齊齊哈爾");
    Users user1=new Users(2L,"張四",true,20,"山東濟寧梁山");
    Users user2=new Users(3L,"張王妹",false,18,"湖北十堰武當山");
    users.add(user);
    users.add(user1);
    users.add(user2);


    JsonConfig cfg=new JsonConfig();
    cfg.setExcludes(new String[]{"sex"}); //指定做json轉換時要排除的屬性

    JSONArray jsonArr=JSONArray.fromObject(users,cfg);
    System.out.println(jsonArr);
    }


  4. 阻止自循環而導至死循環

    <!-- 我們在結合hibernate 使用時, 查出的一個對象,通常帶有某些對象屬性,並且還是雙象關聯

    如: 部門對象下有員工集合,員工對象裏有所屬部門對象

    此時再直接轉換就會出現死循環

    解決方法: 1.setExcludes排除

    2.setCycleDetectionStrategy()

    -->

    @Test
    public void testSetCycleDetectionStrategy(){
    Dept dept=deptDao.findById(new Byte("20"));
    Emp emp=new Emp();
    dept.getEmps().add(emp);
    emp.setDept(dept);


    JsonConfig cfg=new JsonConfig();

    //雙向關聯死循環的解決方法
    cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

    JSONObject jsonObj=JSONObject.fromObject(dept,cfg);
    System.out.println(jsonObj);

    }


  5. 用自帶的類型轉換器防止時間轉換出錯:此時 從數據庫返回的時間對象都是java.sql 包下的,直接轉會出錯,所以得用類型轉換換,json-lib自帶有

    <!-- 直接轉換時間對象 registerJsonBeanProcessor()

    JsDateJsonBeanProcessor 類

    -->

    @Test
    public void testDataConvert(){
    Date date=new java.sql.Date(System.currentTimeMillis());

    JsonConfig cfg=new JsonConfig();
    cfg.registerJsonBeanProcessor(java.sql.Date.class, new JsDateJsonBeanProcessor());

    JSONObject jsonObj=JSONObject.fromObject(date,cfg);
    System.out.println(jsonObj);
    }


    <!-- 轉換時間屬性 registerJsonValueProcessor()

    JsDateJsonValueProcessor 類

    --->

    @Test
    public void testDataConvertProperty(){
    Emp emp=new Emp();
    emp.setHiredate(new java.sql.Date(System.currentTimeMillis()));

    JsonConfig cfg=new JsonConfig();
    cfg.registerJsonValueProcessor(java.sql.Date.class, new JsDateJsonValueProcessor());

    JSONObject jsonObj=JSONObject.fromObject(emp,cfg);
    System.out.println(jsonObj);
    }


  6. 自定義類型轉換器

    <!-- 實現接口-->

    @Test
    public void testDataConvertProperty(){
    Emp emp=new Emp();
    emp.setHiredate(new java.sql.Date(System.currentTimeMillis()));

    JsonConfig cfg=new JsonConfig();
    cfg.registerJsonValueProcessor(java.sql.Date.class, new JsonValueProcessor(){

    public Object processArrayValue(Object arg0, JsonConfig arg1) {
    return new SimpleDateFormat("yyyy-MM-dd").format(arg0);
    }

    public Object processObjectValue(String arg0, Object arg1,
    JsonConfig arg2) {
    return new SimpleDateFormat("yyyy-MM-dd").format(arg1);
    }
    });

    JSONObject jsonObj=JSONObject.fromObject(emp,cfg);
    System.out.println(jsonObj);
    }


  7. json 轉換時 實現自定義key 輸出

    @Test
    public void testDataConvertProperty(){
    Emp emp=new Emp(new Short("20"));
    emp.setEname("張三");
    emp.setJob("測試工程師");

    JsonConfig cfg=new JsonConfig();
    cfg.registerJsonBeanProcessor(Emp.class, new JsonBeanProcessor() {
    /**

    * 實現轉換器接口方法,將指定的屬性轉換成需要的key

    */
    public JSONObject processBean(Object arg0, JsonConfig arg1) {
    Emp emp=(Emp) arg0;
    return new JSONObject()

    //empno-->編號

    .element("編號", emp.getEmpno())

    //ename-->名字
    .element("名字", emp.getEname())

    //job-->工作
    .element("工作", emp.getJob());
    }
    });

    JSONObject jsonObj=JSONObject.fromObject(emp,cfg);
    System.out.println(jsonObj);
    }


    //輸出: {"編號":20,"名字":"張三","工作":"測試工程師"}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章