【问题标题】:How to convert SQL query to JSON Array如何将 SQL 查询转换为 JSON 数组
【发布时间】:2014-07-15 22:45:52
【问题描述】:

我需要像这样转换查询的结果:

SELECT * FROM table WHERE column1=X

到 java 中的 JSONArray。 在我的表中,我有以下列

  1. id:int PRIMARY KEY AUTO_INCREMENT
  2. 字符串
  3. 字符串
  4. 字符串
  5. 字符串
  6. 字符串
  7. int
  8. timeStamp CURRENT_TIMESTAMP

除了不需要的 id 字段外,我需要保持相同的结构。

public static ArrayList<Ticket> lookForATicket(String fermataDiscesa) throws Exception {
    Connection dbConn = null;
    ArrayList<Ticket> list = null;
    try {
        try {
            dbConn = DBConnection.createConnection();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Statement stmt = dbConn.createStatement();
        String query = "SELECT * FROM offer WHERE fermataDiscesa = '" + fermataDiscesa
                + "'";
        //test
        System.out.println(query);
        ResultSet rs = stmt.executeQuery(query);
        list = new ArrayList<Ticket>();
        Ticket tickets = null;
        while (rs.next()) {
            //per test
            System.out.println(rs.getString(1) + rs.getString(2) + rs.getString(3) + rs.getString(4) + rs.getString(5) + rs.getString(6) + rs.getInt(7));
            tickets = new Ticket();
            //setto i campi
            tickets.setIdGooglePlus(rs.getString("IDGOOGLEPLUS"));
            tickets.setIdFacebook(rs.getString("IDFACEBOOK"));
            tickets.setFermataSalita(rs.getString("FERMATASALITA"));
            tickets.setFermataDiscesa(rs.getString("FERMATADISCESA"));
            tickets.setBus(rs.getString("BUS"));
            tickets.setTempoRimasto(rs.getInt("TEMPORIMASTO"));
            tickets.setTimeStamp(rs.getTimestamp("TIMESTAMP"));
            //aggiungo alla lista
            list.add(tickets);
        }
    } catch (SQLException sqle) {
        throw sqle;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        if (dbConn != null) {
            dbConn.close();
        }
        throw e;
    } finally {
        if (dbConn != null) {
            dbConn.close();
        }
    }
    return list;
}

Ticket 是我的自定义类。 这就是“打印”我的 JSON 对象的代码:

    //Path: http://localhost:8080/RESTscambio/search
@Path("/search")
public class Search {
    // HTTP Get Method
    @GET 
    // Path: http://localhost:8080/RESTscambio/search/dosearch
    @Path("/dosearch")
    // Produces JSON as response
    @Produces(MediaType.APPLICATION_JSON) 

public String doSearch(@QueryParam("fermataDiscesa") String fermataDiscesa) throws Exception{
    System.out.println("Cerco biglietti..");
    ArrayList<Ticket> list = null;
    String response = null;

    list = DBConnection.lookForATicket(fermataDiscesa);
    JSONArray jArray = new JSONArray(list);

    if(list != null){
        //System.out.println(jObj.put("list_of_ticket", list).toString());
        //jObj.put("list_of_ticket", list);
        response = Utility.constructJSON("Biglietti disponibili", true);
    }else{
        response = Utility.constructJSON("Nessun biglietto disponibile", false);
    }
return response;        
}

我需要使用响应。我可以定义一个新的打印函数。有人能帮我吗? 谢谢你

【问题讨论】:

  • 您有问题吗?
  • 您使用的是哪个 DBMS? Postgres 作为将数据转换为 JSON 的各种函数。

标签: java sql arrays typeconverter jsonobject


【解决方案1】:

假设您已经能够检索查询结果,您将不得不编写一些代码,但不会太多。我发现Json-lib 易于使用 - 创建和填充 JSON 对象或与 Java 对象(自定义或集合和映射)相互转换非常简单。

链接网站上有很多示例可以指导您。

鉴于您更新的问题(您最初没有说您有 bean),我建议使用 Jackson。 This example 展示了如何使用 Jackson 将 bean 输出到文件和字符串。

我已经回答了您最初关于将查询输出转换为 JSON 的问题。对于其他主题的问题(如回复)的答案,您需要提出一个新的 StackOverflow 问题。

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2015-09-18
    • 2020-01-19
    • 1970-01-01
    • 2020-08-22
    • 2016-09-11
    • 1970-01-01
    • 2020-07-19
    • 2021-10-11
    相关资源
    最近更新 更多