使用json_build_object
PostgreSQL 9.4+可以更简单地完成此操作,该版本允许您通过提供交替的键/值参数来构建JSON。例如:
SELECT json_build_object(
'type', 'Feature',
'id', gid,
'geometry', ST_AsGeoJSON(geom)::json,
'properties', json_build_object(
'feat_type', feat_type,
'feat_area', ST_Area(geom)::geography
)
)
FROM input_table;
在PostgreSQL 9.5+中,情况变得更好了,在PostgreSQL 9.5+中,为jsonb
数据类型(docs)添加了一些新的运算符。这使设置“属性”对象变得容易,该对象包含除id和geometry外的所有内容。
SELECT jsonb_build_object(
'type', 'Feature',
'id', gid,
'geometry', ST_AsGeoJSON(geom)::jsonb,
'properties', to_jsonb(row) - 'gid' - 'geom'
) FROM (SELECT * FROM input_table) row;
要制作FeatureCollection吗?只需将所有内容包装起来jsonb_agg
:
SELECT jsonb_build_object(
'type', 'FeatureCollection',
'features', jsonb_agg(features.feature)
)
FROM (
SELECT jsonb_build_object(
'type', 'Feature',
'id', gid,
'geometry', ST_AsGeoJSON(geom)::jsonb,
'properties', to_jsonb(inputs) - 'gid' - 'geom'
) AS feature
FROM (SELECT * FROM input_table) inputs) features;