如何在日食中使用 gson 将结果集查询转换为 JSON?



我写的代码是:-

import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class JsonFileCreation{
public static JsonArray convertToJSON(ResultSet resultSet)
throws Exception {
JsonArray jsonArray = new JsonArray();
while (resultSet.next()) {
int total_columns = resultSet.getMetaData().getColumnCount();
JsonObject obj = new JsonObject();
for (int i = 0; i < total_columns; i++) {
obj.put(resultSet.getMetaData().getColumnLabel(i + 1).toLowerCase(), resultSet.getObject(i + 1));
}
jsonArray.put(obj);
}
return jsonArray;
}
public static void main(String args[]) {
Gson gson = new Gson(); 
JsonArray jsonArr = new JsonArray();
....
}

在行中显示错误。它显示 put(字符串,对象(未为类型 Json 对象定义。

jsonArray.put(obj);

我的结果集查询是-

sql = "SELECT * FROM EMPLOYEE";
ResultSet rs = stmt.executeQuery(sql); 

该表如下所示:

点击这里查看表格

我是初学者。请帮助我如何正确编写代码并在浏览器中获取 json 输出。

您得到的错误是:

put(字符串,对象(没有为类型JsonObject定义。

如果你看一下Gson Javadoc forJsonObject,这个消息是正确的。JsonObject类没有put方法。

相反,有一些add方法,您可能想要使用这些方法。

但是,没有add方法可以接受任何类型的对象并将其放入 JSON 中。 您将不得不自己处理各种不同类型的价值。 您可能会得到null值,字符串,数字,日期以及其他可能的信息。

我建议创建一个新方法,如下所示,以处理向 JSON 对象添加单个值obj. 它将在它知道的几种不同类型中检查给定值,并使用相关的JsonObjectaddaddProperty方法来添加值:

private static void addValueToJSON(JsonObject obj, String propertyName, Object value) throws Exception {
if (value == null) {
obj.add(propertyName, JsonNull.INSTANCE);
} else if (value instanceof Number) {
obj.addProperty(propertyName, (Number)value);
} else if (value instanceof String) {
obj.addProperty(propertyName, (String)value);
} else if (value instanceof java.sql.Date) {
// Not clear how you want dates to be represented in JSON.
// Perhaps use SimpleDateFormat to convert them to a string?
// I'll leave it up to you to finish this off.
} else {
// Some other type of value.  You can of course add handling
// for extra types of values that you get, but it's worth
// keeping this line at the bottom to ensure that if you do
// get a value you are not expecting, you find out about it.
throw new Exception("Unrecognised type of value: " + value.getClass().getName());
}
}

完成此操作后,您将通过替换行来调用新方法

obj.put(resultSet.getMetaData().getColumnLabel(i + 1).toLowerCase(), resultSet.getObject(i + 1));

addValueToJSON(obj, resultSet.getMetaData().getColumnLabel(i + 1).toLowerCase(), resultSet.getObject(i + 1));

最后,你写道你的错误发生在线上

jsonArray.put(obj);

我不相信这是正确的,因为在这一行上,您不会尝试在JsonObject上调用方法。 但是,JsonArray类也没有put方法,因此此行也存在错误。 在这种情况下,错误更容易修复:与JsonObject类一样,JsonArray类也有add方法,但您可以使用采用JsonElement的方法,因为您要向数组添加JsonObject并且JsonObject扩展JsonElement。 这次的修复只是替换的情况

jsonArray.put(obj);

jsonArray.add(obj);

相关内容

  • 没有找到相关文章

最新更新