`
zhao103804
  • 浏览: 124679 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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()则可以实现有序

 

 

 

 

分享到:
评论

相关推荐

    List转json 顺序不一致(针对json2.1版本JSONObject类重写)

    在Java编程中,将List转换为JSON对象是一个常见的任务,但是有时我们可能会遇到转换后JSON对象中的元素顺序与原始List不一致的问题。这个问题通常源于JSON库的实现方式,特别是对于某些旧版本的JSON库,例如这里提到...

    springMVC poi解析ajax上传excel文件,返回json对象\list数组

    先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel,读取内容后保存到List中,再将List转Json(使用Linked,增删快,与Excel表顺序保持一致),Sheet表1————&gt;List...

    json Encoding/Decoding Examples

    使用`LinkedHashMap`可以确保输出的顺序与添加时的顺序一致。通过`JSONValue.parseWithException()`方法将Map转换为JSON对象。 #### 四、总结 通过以上示例,我们可以看到在Java中进行JSON编码的不同方法。根据实际...

    java中fastjson生成和解析json数据(序列化和反序列化数据)

    该代码将输出键值对,但不保证顺序一致。通过5次循环测试,可以发现,每次输出的顺序都可能不同,因为JSONObject并不保证顺序。 总而言之,Fastjson在Java环境中处理JSON数据时是不可或缺的工具,它在性能上具有...

    js代码-判断两个JSON LIST是否有交集

    如果JSON对象的属性顺序不一致,或者包含不可哈希的类型(如数组、函数等),则可能无法正确识别交集。 在实际开发中,为了提高性能,还可以考虑将数据结构转换为更利于查询的形式,比如使用`Map`或`Set`。在大量...

    运用注解改变反射之后类属性的顺序

    默认情况下,Java反射API(如`Field[] getDeclaredFields()`方法)返回的字段数组顺序与它们在源代码中的声明顺序一致。在某些场景下,如序列化或JSON转换,我们可能需要控制这些属性的顺序。 为了解决这个问题,...

    推荐的学习Java的学习顺序

    - **JSON/XML数据交换**:学会使用JSON或XML格式进行数据交换。 #### 12. 学习构建工具和版本控制系统 - **Ant/Subversion**:熟悉Ant构建工具的使用方法,了解Subversion版本控制系统的操作。 - **敏捷开发**:...

    微信小程序学习(4)-系统配置app.json详解

    每一个数组元素对应一个页面,顺序决定了页面在小程序中的加载顺序。例如: ```json "pages": [ "pages/index/index", "pages/logs/logs", "pages/main/main", "pages/calList/calList" ] ``` 这里,`index...

    twitter-success-bot:Twitter成功bot,可将任何不和谐的推文转发到Twitter!

    Twitter成功机器人 您可以将成功发送到您的Twitter帐户。 一切都是监视器,并且... 在config.json文件中填写任何凭据-必须按顺序填写所有内容才能正常工作! 享受 :) 如果机器人崩溃,请先运行pm2 list =&gt;获取ID

    前端开源库-meteor-ordered-dict

    2. **模板渲染**:在 Meteor 的Blaze模板引擎中,可以利用有序字典来确保模板渲染的顺序与数据插入的顺序一致。 3. **状态管理**:在状态管理库(如Meteor的Tracker)中,有序字典可以用来追踪和管理状态变化的顺序...

    168 道2019年最新的Python面试题,让你最短时间内掌握核心点.pdf

    14. **Python2与Python3**:主要区别包括print语句变为函数、除法行为改变、字典迭代顺序不固定、Unicode处理改进等。 15. **int与long**:Python2中,int是32位,超过范围自动转为long,Python3中,两者合并为int...

    168 道2019年最新的Python面试题,让你最短时间内掌握核心点.docx

    其中,int和float是数值类型,str是字符串,bool是布尔类型,list和tuple是序列,set是无序不重复元素集,dict是键值对集合。 3. **with方法处理文件**:with语句用于自动管理资源,如打开文件。它会在完成文件操作...

    ember-sortable-list:Ember CLI插件组件,可将jQuery UI可排序列表添加到模板中

    2. **双向数据绑定**:得益于Ember的数据绑定机制,当用户对列表进行排序时,后端模型的数据也会实时更新,保持前端与后端的一致性。 3. **自定义样式和行为**:你可以根据项目需求自定义排序列表的外观和交互,...

    js对c#listbox排序

    在IT行业中,JavaScript(js)和C#是两种常见的编程语言...请注意,为了确保用户体验和数据一致性,排序过程中应考虑错误处理和用户反馈。同时,对于大型数据集,可能需要考虑分页、异步处理或优化排序算法以提高性能。

    ordered-list:用于组织学期论文中参考文献列表的程序

    有序列表(Ordered List)是一种常见的数据结构,常用于呈现有顺序的信息,如步骤指南、排名或参考文献列表。在学期论文中,参考文献的排列通常按照特定的格式和顺序,如作者姓氏字母顺序、出版年份等。利用...

    1000道 互联网Java工程师面试题 485页 .pdf

    ZooKeeper通过ZAB协议来保证事务的顺序一致性。 #### ZooKeeper部署模式和集群规则 ZooKeeper有独立、伪集群和集群部署模式。集群最少需要3台机器以保证leader选举。 #### ZooKeeper动态添加机器、节点监听和...

    Python 276 PDF

    例如,在 HTTP 请求中处理头字段或在序列化 JSON 数据时,保持字段顺序通常是非常重要的。 ### 4. PEP 378:格式规范中的千位分隔符 PEP 378 提出了在字符串格式化中使用千位分隔符的能力。这一特性使得开发者可以...

    2021-2022计算机二级等级考试试题及答案No.14778.docx

    7. Python集合转列表排序:在Python中,`set`转换成`list`后,使用`sort()`方法会按照字母顺序对列表元素进行排序,结果是['j', 's', 'y', 'z']。 8. 计算机记忆:计算机的记忆能力来源于它的存储器,可以存储和...

    非关系数据库对比分析

    Redis 不支持自动分片,需要依赖应用程序来实现一致性哈希。 2. **Memcached**:本身不具备数据冗余机制,通过成熟的哈希算法或环状算法来解决单点故障问题。 3. **MongoDB**:支持多种高可用架构,如主从模式...

Global site tag (gtag.js) - Google Analytics