簡體   English   中英

從結果集轉換為 JSON Object

[英]Convert from ResultSet to JSON Object

我正在嘗試將 ResultSet 轉換為 JSON object。 我已經設法獲得了 JSON 陣列 object。 Is there a way I can convert JSON object to JSON Array, or from ResultSet to JSON Object directly?

我嘗試遵循以下鏈接中的以下建議。 如何將 JSONArray 轉換為 JSONObject?

但是我現在得到的JSON object是這樣的:

{"data":[{"patient_key":80},{"eng_surname":"CAN"},{"eng_givename":"NOT"}....]}

我希望對 API 調用有類似的東西:

{       "patientKey": 88,
        "hkid": " U0500574",
        "engSurname": "CAN",
        "engGivename": "NOT ", ....}

有什么辦法可以得到我想要的結果嗎?

這就是我轉換為 JSON 數組的方式。

public static JSONArray convertToJSONArray(ResultSet resultSet)
            throws Exception {
        JSONArray jsonArray = new JSONArray();
        while (resultSet.next()) {
            int total_rows = resultSet.getMetaData().getColumnCount();
            for (int i = 0; i < total_rows; i++) {
                JSONObject obj = new JSONObject();
                obj.put(resultSet.getMetaData().getColumnLabel(i + 1)
                        .toLowerCase(), resultSet.getObject(i + 1));
                jsonArray.put(obj);
            }
        }
        return jsonArray;
    }

試試這個實現 -

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;

import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

public class ResultSetConverter {
  public static JSONArray convert( ResultSet rs )
    throws SQLException, JSONException
  {
    JSONArray json = new JSONArray();
    ResultSetMetaData rsmd = rs.getMetaData();

    while(rs.next()) {
      int numColumns = rsmd.getColumnCount();
      JSONObject obj = new JSONObject();

      for (int i=1; i<numColumns+1; i++) {
        String column_name = rsmd.getColumnName(i);

        if(rsmd.getColumnType(i)==java.sql.Types.ARRAY){
         obj.put(column_name, rs.getArray(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){
         obj.put(column_name, rs.getInt(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){
         obj.put(column_name, rs.getBoolean(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){
         obj.put(column_name, rs.getBlob(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){
         obj.put(column_name, rs.getDouble(column_name)); 
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){
         obj.put(column_name, rs.getFloat(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){
         obj.put(column_name, rs.getInt(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){
         obj.put(column_name, rs.getNString(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){
         obj.put(column_name, rs.getString(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){
         obj.put(column_name, rs.getInt(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){
         obj.put(column_name, rs.getInt(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.DATE){
         obj.put(column_name, rs.getDate(column_name));
        }
        else if(rsmd.getColumnType(i)==java.sql.Types.TIMESTAMP){
        obj.put(column_name, rs.getTimestamp(column_name));   
        }
        else{
         obj.put(column_name, rs.getObject(column_name));
        }
      }

      json.put(obj);
    }

    return json;
  }
}

您可以為結果創建 model 並將其轉換為 JSON 字符串。 使用 GSON class。

Gson gson = new Gson();
String json = gson.toJson(user);

如何將 Java object 轉換為 JSON 字符串 - ZA79956B0B2E7BDA2197AZD5DAAJSON 序列化示例 Java

拿上面的參考。 您可以將其解析為任何 object。

如果您使用 java8 使用流進行列表操作

Stream 在 Java

我剛剛在問題中管理了您的 function 的兩行。 請告訴我它是否有效。 那我可以告訴你問題出在哪里!

    public static JSONArray convertToJSONArray(ResultSet resultSet)
            throws Exception {
        JSONArray jsonArray = new JSONArray();
        while (resultSet.next()) {
            JSONObject obj = new JSONObject();
            int total_rows = resultSet.getMetaData().getColumnCount();
            for (int i = 0; i < total_rows; i++) {
                obj.put(resultSet.getMetaData().getColumnLabel(i + 1)
                        .toLowerCase(), resultSet.getObject(i + 1));

            }
            jsonArray.put(obj);
        }
        return jsonArray;
    }

如果為此使用第三方庫是一個選項,您可以使用jOOQ 的 JSON 導出功能 您不必使用整個 jOOQ 來使用它,只需編寫:

// Keep this logic
try (ResultSet rs = s.executeQuery()) {

    // ctx is the jOOQ DSLContext.
    // Optionally pass a JSONFormat parameter to get a different desired output
    System.out.println(ctx.fetch(rs).formatJSON(jsonFormat));
}

(免責聲明:我為 jOOQ 背后的公司工作)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM