• 技术文章 >web前端 >js教程

    使用Ajax时Json-lib如何处理

    php中世界最好的语言php中世界最好的语言2018-03-31 13:46:26原创670
    这次给大家带来使用Ajax时Json-lib如何处理,使用Ajax时Json-lib处理的注意事项有哪些,下面就是实战案例,一起来看一下。

    无论是使用ajax还是使用easyui等框架,后台向前台输出数据时都涉及到json处理的问题,这里介绍两种处理方法,第一种是手动配置json的处理方法,另一种使用json-lib的处理方案。普通手动配置方法比较笨拙,每次需要根据字段名逐个配置,因此也无法再其他对象上使用,降低了代码的重用性,使用json-lib工具可以实现自动处理,针对不同的对象又不同的处理措施,大大提高了处理效率和代码的重用性,以下分别根据案例介绍两种方法的过程:

    方法一:普通方法,通过手动配置转型的过程,以easyui的请求方法为例,前台通过dategrid向后台请求用户列表数据,数据中存在普通字段(int、String)数据,也有日期(date)数据,

    jsp页面:

    <table id="dg" title="用户管理" class="easyui-datagrid"
     fitColumns="true" pagination="true" rownumbers="true"
     url="${pageContext.request.contextPath}/user_list.action" fit="true" toolbar="#tb">
     <thead>
     <tr>
      <th field="cb" checkbox="true" align="center"></th>
      <th field="id" width="50" align="center">编号</th>
      <th field="trueName" width="80" align="center">真实姓名</th>
      <th field="userName" width="80" align="center">用户名</th>
      <th field="password" width="80" align="center">密码</th>
      <th field="sex" width="50" align="center">性别</th>
      <th field="birthday" width="100" align="center">出生日期</th>
      <th field="identityId" width="130" align="center">身份证</th>
      <th field="email" width="120" align="center">邮件</th>
      <th field="mobile" width="80" align="center">联系电话</th>
      <th field="address" width="100" align="center">家庭地址</th>
     </tr>
     </thead>
    </table>

    *******************************************************************************************************************************************************

    action层:

    public void list()throws Exception{
     PageBean pageBean=new PageBean(Integer.parseInt(page), Integer.parseInt(rows));
     List<User> userList=userService.findUserList(s_user, pageBean);
     Long total=userService.getUserCount(s_user);
     JSONObject result=new JSONObject();
     JSONArray jsonArray=JsonUtil.formatUserListToJsonArray(userList);
     //easyui接收属性为rows(数据内容)和total(总记录数)
     result.put("rows", jsonArray);
     result.put("total", total);
     //获取response对象
     ResponseUtil.write(ServletActionContext.getResponse(), result);
    }

    *******************************************************************************************************************************************************

    util工具:

    public class JsonUtil {
      /**
       * 将List结果集转化为JsonArray
       * @param gradeService
       * @param stuList
       * @return
       * @throws Exception
       */
      public static JSONArray formatUserListToJsonArray(List<User> userList)throws Exception{
        JSONArray array=new JSONArray();
        for(int i=0;i<userList.size();i++){
          User user=userList.get(i);
          JSONObject jsonObject=new JSONObject(); 
          jsonObject.put("userName", user.getUserName());   //需手动逐个配置json的key-code
          jsonObject.put("password", user.getPassword());
          jsonObject.put("trueName", user.getTrueName());
          jsonObject.put("sex", user.getSex());
          jsonObject.put("birthday", DateUtil.formatDate((user.getBirthday()), "yyyy-MM-dd"));
          jsonObject.put("identityId", user.getIdentityId());
          jsonObject.put("email", user.getEmail());
          jsonObject.put("mobile", user.getMobile());
          jsonObject.put("address", user.getAddress());
          jsonObject.put("id", user.getId());
          array.add(jsonObject);
        }
        return array;
      }
    }

    方法二:使用jsonLib工具完成处理,以easyui的请求方法为例,前台通过dategrid向后台请求商品列表数据,数据中存在普通字段(int、String)数据,也有日期(date)数据,同时商品对象(Product)还级联了类别对象(ProductType)

    jsp页面:

    <table id="dg" title="商品管理" class="easyui-datagrid"
    fitColumns="true" pagination="true" rownumbers="true"
     url="${pageContext.request.contextPath}/product_list.action" fit="true" toolbar="#tb">
     <thead>
     <tr>
     <th field="cb" checkbox="true" align="center"></th>
     <th field="id" width="50" align="center" hidden="true">编号</th>
     <th field="proPic" width="60" align="center" formatter="formatProPic">商品图片</th>
     <th field="name" width="150" align="center">商品名称</th>
     <th field="price" width="50" align="center">价格</th>
     <th field="stock" width="50" align="center">库存</th>
     <th field="smallType.id" width="100" align="center" formatter="formatTypeId" hidden="true">所属商品类id</th>
     <th field="smallType.name" width="100" align="center" formatter="formatTypeName">所属商品类</th>
     <th field="description" width="50" align="center" hidden="true">描述</th>
     <th field="hotTime" width="50" align="center" hidden="true">上架时间</th>
     </tr>
     </thead>
    </table>

    *******************************************************************************************************************************************************

    action层:

    public void list() throws Exception{
     PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
     List<Product> productList=productService.getProducts(s_product, pageBean);
     long total=productService.getProductCount(s_product);
     
     //使用jsonLib工具将list转为json
     JsonConfig jsonConfig=new JsonConfig();
     jsonConfig.setExcludes(new String[]{"orderProductList"}); //非字符串对象不予处理
     jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd")); //处理日期
     jsonConfig.registerJsonValueProcessor(ProductType.class,new ObjectJsonValueProcessor(new String[]{"id","name"}, ProductType.class)); //处理类别list对象
     JSONArray rows=JSONArray.fromObject(productList, jsonConfig);
     JSONObject result=new JSONObject();
     result.put("rows", rows);
     result.put("total", total);
     ResponseUtil.write(ServletActionContext.getResponse(), result);
    }

    *******************************************************************************************************************************************************

    util工具:

    /**
     * json-lib 日期处理类
     * @author Administrator
     *
     */
    public class DateJsonValueProcessor implements JsonValueProcessor{
     private String format; 
     
      public DateJsonValueProcessor(String format){ 
        this.format = format; 
      } 
     public Object processArrayValue(Object value, JsonConfig jsonConfig) {
     // TODO Auto-generated method stub
     return null;
     }
     public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
     if(value == null) 
        { 
          return ""; 
        } 
        if(value instanceof java.sql.Timestamp) 
        { 
          String str = new SimpleDateFormat(format).format((java.sql.Timestamp)value); 
          return str; 
        } 
        if (value instanceof java.util.Date) 
        { 
          String str = new SimpleDateFormat(format).format((java.util.Date) value); 
          return str; 
        } 
        return value.toString(); 
     }
    }
    /**
     * 解决对象级联问题
     * @author Administrator
     *
     */
    public class ObjectJsonValueProcessor implements JsonValueProcessor{
     /**
     * 保留的字段
     */
     private String[] properties; 
     
     /**
     * 处理类型
     */
     private Class<?> clazz; 
     
     /**
     * 构造方法 
     * @param properties
     * @param clazz
     */
     public ObjectJsonValueProcessor(String[] properties,Class<?> clazz){ 
        this.properties = properties; 
        this.clazz =clazz; 
      } 
     
     public Object processArrayValue(Object arg0, JsonConfig arg1) {
     // TODO Auto-generated method stub
     return null;
     }
     public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
     PropertyDescriptor pd = null; 
        Method method = null; 
        StringBuffer json = new StringBuffer("{"); 
        try{ 
          for(int i=0;i<properties.length;i++){ 
            pd = new PropertyDescriptor(properties[i], clazz); 
            method = pd.getReadMethod(); 
            String v = String.valueOf(method.invoke(value)); 
            json.append("'"+properties[i]+"':'"+v+"'"); 
            json.append(i != properties.length-1?",":""); 
          } 
          json.append("}"); 
        }catch (Exception e) { 
          e.printStackTrace(); 
        } 
        return JSONObject.fromObject(json.toString()); 
     }
    }

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    用history让ajax支持前进/后退/刷新

    Ajax方法实现Form表单提交的方法

    以上就是使用Ajax时Json-lib如何处理的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:javascript Json-lib Ajax
    上一篇:使用js开发数据库 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • react怎么实现列表排序• 一文聊聊Node包管理发展的五个阶段• 带你了解Angular组件间进行通信的几种方法• 聊聊怎么用node写入读取文件内容• react 怎么实现按需加载
    1/1

    PHP中文网