接口同步会涉及到增加或减少字段,每次增减都要改代码太麻烦,如果直接通过pg的函数生成报文json字符串,这样只需要改函数就可以了
一、单行数据转 json 对象
1.row_to_json:整行转 json
把查询的一行数据直接变成一个 json 对象
-- 示例:用户表单行转 json select row_to_json(users) from users where id = 1;
结果:
{"id":1,"name":"张三","age":25,"email":"zhangsan@test.com"}2. json_build_object:自定义键名转 json
手动指定 json 的键 (key)和值 (value),灵活可控
-- 自定义键名,只返回需要的字段
select
json_build_object(
'userid', id,
'username', name,
'userage', age
) as user_json
from users
where id = 1;结果:
{"userid":1,"username":"张三","userage":25}二、多行数据转 json 数组
1.json_agg+ 子查询(标准数组)
把多行结果打包成json 数组字符串
-- 所有用户转 json 数组
select json_agg(users) from users;
-- 只筛选指定字段转数组
select json_agg(
json_build_object('id',id,'name',name)
) from users where age > 20;结果:
[{"id":1,"name":"张三"},{"id":2,"name":"李四"}]2.array_to_json+ 数组(简单数组)
把普通 postgresql 数组转 json 数组
select array_to_json(array[1,2,3,4]); -- [1,2,3,4] select array_to_json(array['苹果','香蕉']); -- ["苹果","香蕉"]
三、拼接复杂嵌套 json
1. 嵌套 json 对象
select json_build_object(
'code', 200,
'msg', 'success',
'data', json_build_object(
'user', row_to_json(users),
'createtime', now()
)
) from users where id = 1;结果:
{
"code":200,
"msg":"success",
"data":{
"user":{"id":1,"name":"张三","age":25},
"createtime":"2025-05-20 10:00:00"
}
}2. 嵌套 json 数组
select json_build_object( 'total', 2, 'list', json_agg(users) ) from users;
四、直接输出纯 json 字符串(无引号转义)
默认返回的是 json/jsonb 类型,如果你需要纯文本字符串,用 ::text 强转:
-- 输出标准 json 字符串 select row_to_json(users)::text from users where id = 1;
复杂的json数据就需要自己摸索了
所有函数都是 postgresql 内置,无需安装扩展,直接使用
到此这篇关于postgresql生成json字符串的方法汇总的文章就介绍到这了,更多相关postgresql生成json字符串内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论