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

PostgreSQL中jsonb类型转换与to_jsonb函数的查询结果差异原因

两条PostgreSQL查询结果不同的原因分析

第一条语句的逻辑

select '{"items":["foo", "bar"]}'::jsonb->'items';

这条语句里的::jsonb是类型强制转换,PostgreSQL会直接解析这个符合JSON格式的字符串,将其转换成包含items键的JSON对象。之后用->'items'访问对象的items键,就能正确拿到对应的数组["foo", "bar"]。

第二条语句的逻辑

select to_jsonb('{"items":["foo", "bar"]}'::text)->'items';

这里是先把字符串转为text类型(其实::text可以省略,原字符串本身就是text类型),再通过to_jsonb()函数处理这个文本。to_jsonb()处理text类型的规则是:把整个文本当作JSON字符串值包装起来,转换后的jsonb实际是"{"items":["foo", "bar"]}"(外层多了引号,是一个字符串,而非JSON对象)。

当用->'items'去访问这个字符串的items键时,由于JSON字符串没有键值对结构,找不到对应的键,所以返回NULL,也就是你看到的[NULL]。

核心区别

  • ::jsonb会直接解析JSON格式的字符串,生成对应的JSON对象/数组结构
  • to_jsonb(text)仅把输入文本当作JSON的一个字符串值,不会解析文本内容的JSON结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:47:09