json数据解析

来源:互联网 发布:视频广告制作软件 编辑:程序博客网 时间:2024/06/06 19:42

今天在做easyui列表页面回显字典表数据时候遇到一个json解析的奇怪问题,

首先我用spring getHibernateTemplate()中的createSQLQuery进行数据查询 查出来的数据是

[2,2,2,2,2,2,2,]之类的

public List findByPage(final String hql, final Object[] values, final int currentpage,
            final int pagesize) throws HibernateException {
        // 通过一个HibernateCallback对象来执行查询
        List list = (List) getHibernateTemplate().execute(
                new HibernateCallback() {
                    // 实现HibernateCallback接口必须实现的方法
                    public Object doInHibernate(Session session)
                            throws HibernateException {
                        // 执行Hibernate分页查询
                        SQLQuery query = session.createSQLQuery(hql);
                        // 为hql语句传入参数
                       if (values!=null) {
                        for (int i = 0; i < values.length; i++) {
                            query.setParameter(i, values[i]);
                        }
                    }
                       query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
                     // 执行Hibernate分页查询
                        List result = query.setFirstResult((currentpage - 1) * pagesize)
                                .setMaxResults(pagesize).list();
                        List<HashMap<String,Object>> lm = new ArrayList<HashMap<String,Object>>();
                        for(int i = 0; i < result.size(); i++){
                            HashMap<String, Object> m = (HashMap<String, Object>) result.get(i);
                            Iterator it = m.keySet().iterator();
                            while(it.hasNext()){
                                String key = (String)it.next();
                                if(m.get(key) == null){
                                    m.put(key, "");
                                }
                            }
                            lm.add(m);
                        }
                        return lm;
                    }
                });
        return list;
    }

但是我easyUI 的前台datagride显示数据需要json格式为

[{key:value,key.value}]这种的 所以我用query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);对其进行转化

转化之后数据格式是对了但是如果数据为null和日期的话,json传到前台就变成对象类型null变为{},时间变成一个对象,前台页面会显示[object Object]

在经理的帮助下 暂时解决了处理null的话

在dao实现里处理

List<HashMap<String,Object>> lm = new ArrayList<HashMap<String,Object>>();
                        for(int i = 0; i < result.size(); i++){
                            HashMap<String, Object> m = (HashMap<String, Object>) result.get(i);
                            Iterator it = m.keySet().iterator();
                            while(it.hasNext()){
                                String key = (String)it.next();
                                if(m.get(key) == null){
                                    m.put(key, "");
                                }
                            }
                            lm.add(m);
                        }

时间时timestamp类型就在action中处理

cfg.registerJsonValueProcessor(Timestamp.class,new JsonDateValueProcessor());

问题就解决了 页面可以正常显示了。但是不明白具体的原理,忘朋友们知道的告知,并提供正确的解决方案。

0 0
原创粉丝点击