如何在 Eclipse 中使用 gson 将 ResultSet Query 转换为 JSON?

Posted

技术标签:

【中文标题】如何在 Eclipse 中使用 gson 将 ResultSet Query 转换为 JSON?【英文标题】:How to make convert ResultSet Query to JSON using gson in eclipse? 【发布时间】:2020-06-10 16:03:44 【问题描述】:

我写的代码是:-

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(String,Object) 没有为 Json Object 类型定义。

jsonArray.put(obj);

我的结果集查询是-

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

表格如下所示:

Click here to view the table

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

【问题讨论】:

您好,欢迎来到 Stack Overflow。您提到您的代码给您一个错误,请编辑您的问题以包含错误的详细信息。有很多错误可能是由不起作用的代码生成的,如果不了解更多细节,我们将无法为您提供帮助。 (我们也不想猜测错误可能是什么,因为如果我们猜错了,我们将提供对错误错误的修复,这将无济于事。) 我已经提过了。如果你能帮上忙,那就太好了! 【参考方案1】:

你得到的错误是:

put(String,Object) 没有为 JsonObject 类型定义。

如果您查看Gson Javadoc 的JsonObject,则该消息是正确的。 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);

【讨论】:

感谢您的帮助!它确实帮助了我很多!

以上是关于如何在 Eclipse 中使用 gson 将 ResultSet Query 转换为 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

eclipse:Gson安装:“Java Build Path”

JAVA,为啥我不能引用gson包?

安卓项目怎么导入gson

Android Gson使用入门及GsonFormat插件的使用

Android Gson使用入门及GsonFormat插件的使用

Android Gson使用入门及GsonFormat插件的使用