首页 > 解决方案 > PostgreSQL 获取 json 作为记录

问题描述

我希望能够获得一个 json 对象作为记录。

SELECT select row_number() OVER () AS gid, feature->'properties' FROM dataset

此查询的输出如下所示:

吉德 ?柱子?json
1 {"a": "1", "b":"2", "c": "3"}
2 {"a": "3", "b":"2", "c": "1"}
3 {"a": "1"}

期望的结果:

吉德 一个 b C
1 1 2 3
2 3 2 1
3 1 无效的 无效的

我不能使用 json_to_record 因为我不知道字段的数量。但是,我所有的字段都是文本。

标签: sqlpostgresql

解决方案


没有通用的方法可以做到这一点,因为在查询解析时必须知道列的数量、类型和名称。所以你必须这样做:

SELECT row_number() OVER () AS gid,
       CAST(feature #>> '{properties,a}' AS integer) AS a,
       CAST(feature #>> '{properties,b}' AS integer) AS b,
       CAST(feature #>> '{properties,c}' AS integer) AS c
FROM dataset;

本质上,您必须提前知道列并在查询中对它们进行硬编码。


推荐阅读