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,"名字":"张三","工作":"测试工程师"}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值