PostgreSQL 生成 JSON 字符串

接口同步会涉及到增加或减少字段,每次增减都要改代码太麻烦,如果直接通过PG的函数生成报文JSON字符串,这样只需要改函数就可以了

一、单行数据转 JSON 对象

1. row_to_json:整行转 JSON

把查询的一行数据直接变成一个 JSON 对象

sql 复制代码
-- 示例:用户表单行转 JSON
SELECT row_to_json(users) FROM users WHERE id = 1;

结果:

sql 复制代码
{"id":1,"name":"张三","age":25,"email":"zhangsan@test.com"}
  1. json_build_object:自定义键名转 JSON

手动指定 JSON 的键 (key)值 (value),灵活可控

sql 复制代码
-- 自定义键名,只返回需要的字段
SELECT 
  json_build_object(
    'userId', id,
    'userName', name,
    'userAge', age
  ) AS user_json
FROM users 
WHERE id = 1;

结果:

sql 复制代码
{"userId":1,"userName":"张三","userAge":25}

二、多行数据转 JSON 数组

1. json_agg + 子查询(标准数组)

把多行结果打包成JSON 数组字符串

sql 复制代码
-- 所有用户转 JSON 数组
SELECT json_agg(users) FROM users;

-- 只筛选指定字段转数组
SELECT json_agg(
  json_build_object('id',id,'name',name)
) FROM users WHERE age > 20;

结果:

sql 复制代码
[{"id":1,"name":"张三"},{"id":2,"name":"李四"}]

2. array_to_json + 数组(简单数组)

把普通 PostgreSQL 数组转 JSON 数组

sql 复制代码
SELECT array_to_json(ARRAY[1,2,3,4]);  -- [1,2,3,4]
SELECT array_to_json(ARRAY['苹果','香蕉']);  -- ["苹果","香蕉"]

三、拼接复杂嵌套 JSON

  1. 嵌套 JSON 对象
sql 复制代码
SELECT json_build_object(
  'code', 200,
  'msg', 'success',
  'data', json_build_object(
    'user', row_to_json(users),
    'createTime', now()
  )
) FROM users WHERE id = 1;

结果:

sql 复制代码
{
  "code":200,
  "msg":"success",
  "data":{
    "user":{"id":1,"name":"张三","age":25},
    "createTime":"2025-05-20 10:00:00"
  }
}
  1. 嵌套 JSON 数组
sql 复制代码
SELECT json_build_object(
  'total', 2,
  'list', json_agg(users)
) FROM users;

四、直接输出纯 JSON 字符串(无引号转义)

默认返回的是 json/jsonb 类型,如果你需要纯文本字符串 ,用 ::text 强转:

sql 复制代码
-- 输出标准 JSON 字符串
SELECT row_to_json(users)::text FROM users WHERE id = 1;

复杂的json数据就需要自己摸索了

所有函数都是 PostgreSQL 内置,无需安装扩展,直接使用

相关推荐
IvorySQL7 小时前
PostgreSQL 日报|逻辑复制行过滤致数据丢失(8 月 21 日)
数据库·postgresql
leisoo80979 小时前
ig50数据落盘ClickHousevsTimescaleDBvsDuckDB实测对比 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
浪浪山小野猪15 小时前
JSON 常见错误大全:尾逗号、单引号、注释,一次讲透
json
钱六两16 小时前
SpringAI集成RAG实操(postgresql+pgvector)中(集成到项目中)
数据库·postgresql
Wang's Blog19 小时前
PostgreSQL笔记64:分区插件生态与扩展查询协议深度解析
数据库·笔记·postgresql
AC赳赳老秦19 小时前
个保法下数据处理:OpenClaw 自动过滤公开数据中的个人信息,保障采集分析合规性
java·python·sqlite·json·php·deepseek·openclaw
Web - Anonymous19 小时前
Vue3 + Element Plus 集成 JSON Editor 实现实时校验 JSON 编辑器(高亮/暗亮主题/分栏回显/组件复用) - 附完整示例
vue.js·编辑器·json
码云骑士20 小时前
116-Python调用GPT-4V分析图片-Base64编码-多图-JSON结构化输出
开发语言·python·json
smallcelebration21 小时前
147 postgreSQL使用pgAdmin 4图形界面操作记录
数据库·postgresql
瀚高PG实验室1 天前
PostgreSQL libpq lo_* 函数允许服务器超级用户覆盖客户端栈内存HGVE-2026-E011
服务器·数据库·postgresql·瀚高数据库