【发布时间】:2020-04-24 20:00:05
【问题描述】:
我有一个带有下一个方案的数据库,它使用 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、properties 和 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;
但是当我向邮递员发出请求时,它会返回:
[
{
"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"
},
...
]
【问题讨论】:
-
您只是从地震表中选择,对吗?您的预期结果是什么?
-
是的,我编辑了问题以显示我的预期结果
-
SQL 查询和 Postman 请求之间似乎有额外的步骤,您是在开发 Web 应用程序吗?
-
您似乎将结果集编码为 json。所以里面的json被双重编码了。
-
你可以在 JSON 中做任何你能想象到的事情,你为什么不发挥你的想象力?
标签: java json postgresql spring-boot