从 ResultSet 转换为 JSON 对象
Convert from ResultSet to JSON Object
我正在尝试将 ResultSet 转换为 JSON 对象。我已经设法得到一个 JSON 数组对象。有没有一种方法可以将 JSON 对象转换为 JSON 数组,或者直接从 ResultSet 转换为 JSON 对象?
我尝试遵循以下 link 中的建议。
How can I turn a JSONArray into a JSONObject?
但是我现在得到的JSON对象是这样的:
{"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;
}
}
您可以为结果创建模型并将其转换为 JSON 字符串。使用 GSON class.
Gson gson = new Gson();
String json = gson.toJson(user);
How to convert Java object to JSON String - Gson Java/JSON Serialization Example
采取上述参考。您可以将其解析为任何对象。
如果您正在使用 java8 使用流进行列表操作
我刚刚管理了问题中你的两行函数。请告诉我它是否有效。然后我可以告诉你问题出在哪里!
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's JSON export capabilities。你不必使用整个 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 背后的公司工作)
我正在尝试将 ResultSet 转换为 JSON 对象。我已经设法得到一个 JSON 数组对象。有没有一种方法可以将 JSON 对象转换为 JSON 数组,或者直接从 ResultSet 转换为 JSON 对象?
我尝试遵循以下 link 中的建议。 How can I turn a JSONArray into a JSONObject?
但是我现在得到的JSON对象是这样的:
{"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;
}
}
您可以为结果创建模型并将其转换为 JSON 字符串。使用 GSON class.
Gson gson = new Gson();
String json = gson.toJson(user);
How to convert Java object to JSON String - Gson Java/JSON Serialization Example
采取上述参考。您可以将其解析为任何对象。
如果您正在使用 java8 使用流进行列表操作
我刚刚管理了问题中你的两行函数。请告诉我它是否有效。然后我可以告诉你问题出在哪里!
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's JSON export capabilities。你不必使用整个 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 背后的公司工作)