You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中向JsonObject存入数据时put()方法报错求助

解决Gson JsonObject.put() 传入int类型参数的编译错误

嗨,我来帮你搞定这个编译错误的问题!你遇到的报错,核心原因是com.google.gson.JsonObject的put()方法并不直接支持传入int这类基本数据类型的参数。

为什么会报错?

Gson的JsonObject类里,put(String name, JsonElement value)这个方法要求第二个参数必须是JsonElement的子类(比如JsonPrimitive、JsonObject、JsonArray这些)。而你直接传入的int是Java基本数据类型,不属于JsonElement的体系,编译器找不到匹配的方法重载,就会抛出你看到的"symbol: method put (java.lang.String, int)"错误。

两种解决办法

1. 使用addProperty()方法(推荐)

Gson专门为基本数据类型和字符串提供了addProperty()方法,它会自动把int、String这类类型包装成对应的JsonPrimitive对象,用法简单又符合官方规范。修改你的代码如下:

while (res.next()) {
    JsonObject jo = new JsonObject();
    jo.addProperty("account_id", res.getInt("account_id"));
    jo.addProperty("mandant_id", res.getInt("mandant_id"));
    jo.addProperty("id", res.getInt("id"));
    jo.addProperty("sourcedata", res.getString("sourcedata"));
    ja.add(jo);
}

2. 手动包装为JsonPrimitive(不推荐,仅作了解)

如果你一定要用put()方法,需要手动把int包装成JsonPrimitive对象,代码如下:

while (res.next()) {
    JsonObject jo = new JsonObject();
    jo.put("account_id", new JsonPrimitive(res.getInt("account_id")));
    jo.put("mandant_id", new JsonPrimitive(res.getInt("mandant_id")));
    jo.put("id", new JsonPrimitive(res.getInt("id")));
    jo.put("sourcedata", new JsonPrimitive(res.getString("sourcedata")));
    ja.add(jo);
}

这种写法比addProperty()繁琐,除非有特殊场景需求,不然不建议用。

额外的优化建议

你的代码还有一个潜在的资源泄漏问题:数据库连接、PreparedStatement和ResultSet都没有手动关闭。建议使用Java的try-with-resources语句来自动管理这些资源,它会在代码块结束后自动关闭所有实现了AutoCloseable接口的对象,避免内存泄漏。修改后的代码结构如下:

public String viewdata() {
    String data = "";
    JsonArray ja = new JsonArray();
    // 用try-with-resources自动管理资源
    try (Connection conn = c.getconn();
         PreparedStatement pre = conn.prepareStatement("SELECT * FROM n_pares");
         ResultSet res = pre.executeQuery()) {
        while (res.next()) {
            JsonObject jo = new JsonObject();
            jo.addProperty("account_id", res.getInt("account_id"));
            jo.addProperty("mandant_id", res.getInt("mandant_id"));
            jo.addProperty("id", res.getInt("id"));
            jo.addProperty("sourcedata", res.getString("sourcedata"));
            ja.add(jo);
        }
        data = ja.toString();
    } catch(SQLException ex) {
        Logger.getLogger(n_paresmodul.class.getName()).log(Level.SEVERE, null, ex);
    }
    return data;
}

内容的提问来源于stack exchange,提问作者Hubi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:52:28