java - Jackson 在 OracleResultSet 的数值周围加上引号

标签 java json oracle jackson resultset

我正在使用 Jackson JSON API 在 Java 中创建 JSON 对象,然后进行打印。

我的代码类似于:

OracleResultSet rs = getMyResultSet();
OracleResultSetMetaData rsmd = (OracleResultSetMetaData)rs.getMetaData();

int columnCount = rsmd.getColumnCount();
String[] columnNames = new String[columnCount];
int[] columntypes = new int[columnCount];

for(int i = 1; i < columnCount; ++i) {
    columnNames[i] = rsmd.getColumnName(i);
    columnTypes[i] = rsmd.getColumnTypes(i);
}

ObjectMapper mapper = new ObjectMapper();
ObjectNode node;

String columnName;

while(rs.next()) {
    node = mapper.createObjectNode();

    for(int i = 1; i < columnCount; ++i) {
        columnName = columnNames[i];

        //I have a case defined for every OracleTypes.XXXX, but for brevity I'm only putting the one I'm having issues with here
        switch (columnTypes[i]) {
            case: OracleTypes.NUMBER:
                node.put(columnName, rs.getBigDecimal(i)); //BigDecimal chosen based on: http://docs.oracle.com/cd/B19306_01/java.102/b14188/datamap.htm
                break;
            default:
                node.put(columnName, rs.getString(i));
        }

        //UPDATE: the next line is the logic error that I had that was casuing the trouble
        node.put(columnName, rs.getString(i));
    }

    System.out.println(mapper.writeValueAsString(node));
}

这一切都很好。问题是我什么时候去打印它。

OracleTypes.NUMBER 案例中提取的任何值都将被引用,即使它们不应该被引用。我得到的示例字符串:

{"month":"1","year":"2013","modified":"2013-02-05 13:41:48.0","net":"294.68"}

我想要的:

{"month":"1","year":"2013","modified":"2013-02-05 13:41:48.0","net":294.68}

为什么 BigDecimal(或我的测试中的任何非整数)被打印时带有引号?我的理解是,JSON 中的所有真实数值都应该在不带引号的情况下打印出来。我认为这可能是一个原始/对象问题,并尝试从 BigDecimal 获取 double 值,但这没有帮助。

我已经使用调试器测试了程序,它确实正确使用了 switch-case 语句,所以这不是问题。

最佳答案

我复制粘贴了您的代码并得到了您期望的结果(无引号):

{ “团体”:“书籍”, “账户”:“001”, “年龄”:35岁, “净值”:9.86

这可能是版本问题,你用的是什么版本?

我使用最新的 jackson 版本获得以上输出: jackson 核心-asl-1.9.13.jar jackson-mapper-asl-1.9.13.jar

关于java - Jackson 在 OracleResultSet 的数值周围加上引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28439815/

相关文章:

sql - Oracle create table with foreign key 错误 - 标识符无效

java - 给定的测试数据比较器失败 - 为什么?

java - 写入扩展数组

database - 尝试使用随机数据更新列时出现 ORA-06502

java - 将模型对象数组传递给 Fragment

JavaScript 在数组中使用 Indexof 搜索名称

sql - 如何在 SQL DEVELOPER 中设置表中主键的自动增量?

java - Android 应用程序不改变音量

java - Unix Copy & JSch 命令在 SFTP 时产生冲突

java - Solr Custom RequestHandler - 注入(inject)查询参数