从 JSON 中提取深度嵌套的值
Posted
技术标签:
【中文标题】从 JSON 中提取深度嵌套的值【英文标题】:Extract deeply nested values from JSON 【发布时间】:2021-08-03 14:00:34 【问题描述】:我想从 JSON 字符串中提取坐标并将它们分成 2 列,一列用于经度,一列用于纬度。
这是位于event_location
列中的示例 JSON 字符串:
"type": "Feature",
"geometry":
"type": "Point",
"coordinates": [-99.562992, 58.096856]
,
"properties":
"timestamp": 160736582
似乎这将是一件非常简单的事情,但我无法得到它。我尝试过这样的事情:
select event_location ->> 'coordinates' as coordinates
from ...
但这只会返回整个列的所有 NULL。
我也尝试过使用json_populate_recordset
,当我尝试只输入一行时,它引发了错误。
任何帮助或建议都会很棒。
【问题讨论】:
【参考方案1】:你需要像这样使用json functions/operators:
SELECT
event_location->'geometry'->'coordinates'->0 AS lat,
event_location->'geometry'->'coordinates'->1 AS lon,
-- alternate syntax
event_location#>'geometry,coordinates,0' AS lat,
event_location#>'geometry,coordinates,1' AS lon
FROM t
请注意,列的数据类型将是json
,而不是本机 SQL 类型。要获得浮点数,您可以将值提取为文本然后转换:
SELECT
(event_location->'geometry'->'coordinates'->>0)::numeric AS lat,
(event_location->'geometry'->'coordinates'->>0)::numeric AS lon
FROM t
【讨论】:
太完美了,谢谢!正是我想要的!以上是关于从 JSON 中提取深度嵌套的值的主要内容,如果未能解决你的问题,请参考以下文章
具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?
如何使用 angular2 ngFor 深度嵌套的 json 值