当前位置: 首页 > 知识库问答 >
问题:

有没有一种方便的方法将多个ArrayList打包到一个JsonArray中?

滑畅
2023-03-14

我正在尝试设置一个webapp,通过JSON发送数据库表。我想不费吹灰之力把所有的参赛作品都寄出去。因此,我将所有字段读取为ArrayList,现在我可以通过JSON逐个解析并发送它们。但是,难道没有一种方便的方法将它们全部打包到一个JsonArray中吗?

下面是我的代码示例:

public static JSONArray[] getDBEntries(String tablename) {
    JSONArray[] js = new JSONArray[5];
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    ArrayList<String> text = null;
    ArrayList<String> altname = null;
    ArrayList<String> altname2 = null;
    ArrayList<String> icd10 = null;
    ArrayList<String> alphaid = null;
    int index = 0;
    try {
        InitialContext ctx = new InitialContext();
        DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/users");
        conn = ds.getConnection();
        st = conn.createStatement();
        rs = st.executeQuery("SELECT * FROM " + tablename);
        while (rs.next()) {
            text.add(rs.getString("text"));
            if (altname != null) {
                altname.add(rs.getString("altname"));
            }
            if (altname2 != null) {
                altname2.add(rs.getString("altname2"));
            }
            if (icd10 != null) {
                icd10.add(rs.getString("icd10"));
            }
            if (alphaid != null) {
                alphaid.add(rs.getString("alphaid"));
            }
            index++;
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        try {
            if (rs != null) rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (st != null) st.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    js[0] = new JSONArray(text);
    js[1] = new JSONArray(altname);
    js[2] = new JSONArray(altname2);
    js[3] = new JSONArray(icd10);
    js[4] = new JSONArray(alphaid);
    return js;
}

共有1个答案

郝昊东
2023-03-14

您可以尝试在POJO中添加表数据。然后可以使用Gson将其转换为JsonArray

 class AplPojo {
    private String text;
    private String altname;
    private String altname;
    private String icd10;
    private String alphaid;

     //getter and setters
  }
  public static String getDBEntries(String tablename) {

    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    ArrayList<AplPojo> aplPojos = new ArrayList<AplPojo>();
    int index = 0;
    try {
        InitialContext ctx = new InitialContext();
        DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/users");
        conn = ds.getConnection();
        st = conn.createStatement();
        rs = st.executeQuery("SELECT * FROM " + tablename);
        while (rs.next()) {
            AplPojo  aplPojo= new AplPojo();
            aplPojo.setText(rs.getString("text"));
            aplPojo.setAltname(rs.getString("altname"));
            aplPojo.setAltname2(rs.getString("altname2")); 
            aplPojo.setIcd10(rs.getString("icd10")); 
            aplPojo.setAlphaid(rs.getString("alphaid"));
            index++;
            aplPojos.add(aplPojo);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        try {
            if (rs != null) rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (st != null) st.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    } 
     // create a new Gson instance
     Gson gson = new Gson();
     // convert your list to jsonArray
     String aplPojosList = gson.toJson(aplPojos);
     return aplPojos;
}
 类似资料:
  • 问题内容: 我现在有几个Dockerfile。 一种是Cassandra 3.5,它是 我也有一个用于Kafka的Dockerfile,但是要复杂得多。它是,并且它运行长命令来安装Kafka和Zookeeper。 最后,我有一个用Scala编写的使用SBT的应用程序。 对于该Dockerfile,它是,这使我得到了Java 8,Scala 2.11.7和STB 0.13.9。 也许,我不了解Doc

  • 给定项目Reactor的通量或Mono,有没有办法让通量或Mono打印出操作链的样子。例如,下面给出了代码。 有没有办法让flux打印出处理管道中链接的所有操作员的列表?一些漂亮的ascii格式文本或大理石图? printTheFlux(通量)应该制作一个很好的打印输出,显示上面示例中所有运算符的结构。我不期望在lambda中生成代码只是一种查看哪些运算符链接在一起的方式。

  • 问题内容: 我正在尝试建立一个简单的Java程序,该程序可以从其他多个图像(jpg)创建一个动画gif。谁能给我一个有关如何在Java中实现此目标的信息?我已经搜索过Google,但找不到任何真正有用的信息。 感谢你们! 问题答案: 这里有一个类的示例,该类从不同的图像创建动画的gif: 链接 编辑:链接似乎已死。 无论如何,为了清楚起见,这段代码是由Elliot Kroo完成的。 编辑2:感谢您

  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),

  • 我被困在一个Java编码任务中。我应该为现有程序创建三种方法(,,和),让用户将数字输入数组,然后组织并打印该数组接收数组作为参数,向用户请求索引值,并将输入的数字量返回为int。将值复制到一个新数组中,该数组的长度为返回的数字量,对数字进行排序。 我的问题是,根据作业,应该只返回输入的数字量。因此,它将打印的数组值留在方法内部,使得无法检索这些值并将其复制到第二个数组中。如果没有编辑主方法的能力