List转json 顺序不一致

new JSONObject()方法使返回的json格式数据的顺序与list集合中的数据顺序保持一致

 

原因在于json版本问题

json2.1以前源码中new JsonOjbect()中的构建函数是

 public JSONObject()
  {
    this.properties = new HashMap();
  }

 

 

而在2.3版本后源码为:

 public JSONObject()
  {
    this.properties = new ListOrderedMap();
  }

 

 

ListOrderedMap位于commons-collections的jar包里,与普通的map相比,ListOrderedMap的key可保持原有顺序,而hashmap是无序的

 

项目需求:

      将mysql表中的所有字段名和字段注释,表名,表描述用json返回

     表名和秒描述在一张表中展示e_move

 

 

 // 获取所有需要导出的表名
    public static String getTableInfoBeanJson() {
       JSONArray jsonarray = new JSONArray();
        Connection conn = DbHelper.getConnection();
        ResultSet rs = null;
        PreparedStatement ps = null;
        try {
            ps = DbHelper.getConnection().prepareStatement("select * from e_move");

            rs = ps.executeQuery();
            while (rs.next()) {
                JSONObject jsonobj = new JSONObject();
                String tableName = rs.getString("table_name");
                String tableDesc = rs.getString("desc");
                List<ColumnBean> colList = readTableColumn(conn, tableName);
                jsonobj.put("target", tableName);
                jsonobj.put("name", tableDesc);
                jsonobj.put("element", colList);
                jsonarray.add(jsonobj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DbHelper.Close(rs, ps, conn);
        }

        return jsonarray.toString();
    }

//获取表中字段
    public static List<ColumnBean> readTableColumn(Connection conn, String tableName) {
        List<ColumnBean> colList = new ArrayList<ColumnBean>();
        ResultSet resultSet = null;
        try {
            DatabaseMetaData dbmd = conn.getMetaData();
            resultSet = dbmd.getTables(null, "%", "%", new String[] {"TABLE"});
            while (resultSet.next()) {
                String t1 = resultSet.getString("TABLE_NAME");
                ResultSet rs = dbmd.getColumns(null, "%", tableName, "%");
                if (t1.contains(tableName)) {
                    while (rs.next()) {
                        ColumnBean col = new ColumnBean();
                        col.setName(rs.getString("REMARKS"));
                        col.setEname(rs.getString("COLUMN_NAME"));
                        colList.add(col);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DbHelper.Close(resultSet, null, null);
        }

        return colList;
    }

 

 ColumnBean.java

public class ColumnBean {
    private String ename; //字段名
    private String name; //注释
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
   
    
    
    

}

 

注意:用json2.3版本后的,使用new JsonObject()则可以实现有序

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值