java - 如何将多列与其他列一起以 JSON 形式返回

标签 java json postgresql spring-boot

我有一个具有下一个方案的数据库,它使用 postgressql 和 postgis 插件:

table_id | id | mag | time | felt | tsunami | geom

我有一个下一个 SQL 来选择一些行并将这些列作为 JSON 返回:

SELECT ROW_TO_JSON(t) as properties 
FROM ( 
  SELECT id, mag, time, felt, tsunami FROM earthquakes
) t

我想创建一个返回 table_id、属性和 geom 的 SQL 语句,例如:

SELECT table_id, properties, GeometryType(geom) 
from earthquakes

如何以 JSON 形式返回具有属性的 table_id 和 geom?

编辑:

我创建了这个sql:

SELECT table_id, 
row_to_json((SELECT d FROM (SELECT id, mag, time, felt, tsunami ) d)) AS properties, 
GeometryType(geom) 
FROM earthquakes ORDER BY table_id ASC;

但是当我向 postman 发出请求时,它会返回以下内容:

[
    {
        "table_id": 1,
        "properties": {
            "type": "json",
            "value": "{\"id\" : \"ak16994521\", \"mag\" : 2.3}"
        }
    },
    ...
]

如何将值作为对象返回?

我的预期结果应该是:

[
    {
        "table_id": 1,
        "properties": {"id" : "ak16994521", "mag" : 2.3}
    },
    ...
]

Java 方法:

public List<Map<String, Object>> readTable(String nameTable) {
    try {
        String SQL = "SELECT table_id, GeometryType(geom) FROM " + nameTable + " ORDER BY table_id ASC;";           
        return jdbcTemplate.queryForList(SQL);
    } catch( BadSqlGrammarException error) {
        log.info("ERROR READING TABLE: " + nameTable);
        return null;
    }
}

此代码返回此 json:

 [
    {
        "table_id": 1,
        "geometrytype": "POINT"
    },
    {
        "table_id": 2,
        "geometrytype": "POINT"
    },
    ....
]

我的预期结果应该是:

[
    {
        "table_id": 1,
        "properties": {"id" : "ak16994521", "mag" : 2.3, "time": 1507425650893, "felt": "null", "tsunami": 0 },
        "geometrytype": "POINT"
    },
    ...
]

最佳答案

为什么不在数据库上将整个过程转换为 JSON?

SELECT json_agg(x) as json_values FROM (
  SELECT 
    table_id, 
    row_to_json((select d from (select id, mag, time, felt, tsunami) d)) as properties, 
    GeometryType(geom)
  FROM earthquakes 
  ORDER BY table_id ASC
) x;

关于java - 如何将多列与其他列一起以 JSON 形式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59626274/

相关文章:

java - Spring 全局方法安全性和 Aspectj

java - 将服务器上的 UTC 日期转换为本地时间

java - 如何使用 Json 响应显示日期到 Ext Js 列

java - 没有合适的司机。尝试使用 Hibernate 连接到 Heroku 上的 postgresql 数据库

python - 为什么 PostgreSQL cursor.execute() 命令要加单引号?

java - 在 Java 线程之间分配数据库读取作业的最佳方式

java - Spring Data JPA 存储库 findAll() 空指针

json - SqlAlchemy 与 Marshmallow 的关系

javascript - 打印 JSON 属性

javascript - 在 Postgres JSONB 中转义生成的单引号