You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PostgreSQL命令从嵌套字典中提取LOGIN_s字段值

提取PostgreSQL中嵌套JSON的LOGIN_s字段值

嘿,这个问题我之前处理过!你现在需要从查询返回的嵌套JSON数据里提取LOGIN_s字段,其实用PostgreSQL自带的JSON操作符就能轻松搞定,分两种常见情况来看:

情况1:字段是PostgreSQL原生JSON类型(json/jsonb)

如果你的user_position_details字段本身就是json或者jsonb类型(推荐存这种类型,操作更高效),直接用JSON操作符提取就行:

SELECT 
  user_position_details->'user_position'->>'LOGIN_s' AS login_s_value
FROM user_detail
WHERE last_login >= '2018-03-01';
  • ->:用来访问JSON对象的键,返回的是JSON类型的值
  • ->>:和->类似,但直接返回文本类型的字段值,刚好符合你要提取字符串的需求

情况2:字段是文本类型(text/varchar)存的JSON字符串

从你给出的结果示例来看,返回的是带转义的JSON字符串(比如"{\"user_position\": ...}"),说明字段可能是text或varchar类型。这种情况需要先把字符串转成JSON类型,再提取:

SELECT 
  (user_position_details::json)->'user_position'->>'LOGIN_s' AS login_s_value
FROM user_detail
WHERE last_login >= '2018-03-01';

这里::json是PostgreSQL的类型转换语法,把文本转成JSON对象后,就可以用和上面一样的操作符了。

额外技巧:处理缺失字段的情况

如果有些记录里没有LOGIN_s字段,查询会返回NULL。要是想给这些情况设置默认值,可以用COALESCE函数:

SELECT 
  COALESCE((user_position_details::json)->'user_position'->>'LOGIN_s', '无此字段') AS login_s_value
FROM user_detail
WHERE last_login >= '2018-03-01';

内容的提问来源于stack exchange,提问作者Sharayu Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:57:12