我正在尝试创建从数据库中提取数据的geojson文件。
当创建geojson时,解析为inputStream,将其存储在具有fileManager的路径中。
我的问题是,当几何和属性不是json字段时,它们是字符串字段。
例如,当我使用邮递员时,会收到以下消息:
[
{
"geometry": "{\"type\":\"Polygon\",\"coordinates\":[...] }",
"type": "Feature",
"table_id": 1,
"properties": "{\"name\": \"Afghanistan\"}"
}
]
我希望几何字段和属性将是一个json对象。
[
{
"geometry": {"type":"Polygon","coordinates":[...] }",
"type": "Feature",
"table_id": 1,
"properties": "{"name": "Afghanistan"}"
}
]
这是我的代码:
public List<Object> getGeoJsonFromTable(String nameTable) {
String SQL = "SELECT table_id, CAST(properties AS text) as properties, ST_AsGeoJSON(geom) as geometry FROM " + nameTable + " ORDER BY table_id ASC;";
List<Map<String, Object>> result = jdbcTemplate.queryForList(SQL);
JSONObject geojson = new JSONObject();
geojson.put("type", "FeatureCollection");
JSONArray json = new JSONArray();
for (int i=0; i<result.size(); i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", "Feature");
jsonObject.put("table_id", result.get(i).get("table_id"));
jsonObject.put("properties", result.get(i).get("properties"));
jsonObject.put("geometry", result.get(i).get("geometry"));
json.put(jsonObject);
}
geojson.put("feautures", json);
List<Object> gson = json.toList();
return gson;
}
稍后,我会将内容解析为inputStream并将其保存在文件夹目录中。
如何将几何和属性字段作为json对象而不是字符串加载。
谢谢
解决方案:
public List<Object> getGeoJsonFromTable(String nameTable) {
String SQL = "SELECT table_id, CAST(properties AS text) as properties, ST_AsGeoJSON(geom) as geometry FROM " + nameTable + " ORDER BY table_id ASC;";
List<Map<String, Object>> result = jdbcTemplate.queryForList(SQL);
JSONObject geojson = new JSONObject();
geojson.put("type", "FeatureCollection");
JSONArray json = new JSONArray();
for (int i=0; i<result.size(); i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", "Feature");
jsonObject.put("table_id", result.get(i).get("table_id") );
jsonObject.put("geometry", serializeProperty( result.get(i).get("geometry").toString() ) );
jsonObject.put("properties", serializeProperty( result.get(i).get("properties").toString() ) );
json.put(jsonObject);
}
geojson.put("feautures", json);
List<Object> gson = json.toList();
return gson;
}
private JSONObject serializeProperty(String property) {
JsonObject gson = new JsonParser().parse(property).getAsJsonObject();
return new JSONObject(gson.toString());
}