无法访问 JSON 行 Postgresql 中的值?

问题描述 投票:0回答:1

问题

尝试从 sql 查询中的 json 对象获取值时遇到问题。 我正在使用 postgresql。

代码

我将数据保存为json类型

架构.prisma

model Example {
  ...
  raw  Json?
 ...
}

查询该行正确返回json

SELECT
   ex.raw
FROM 
   "Example" ex
{"type":"Eg","device":"Eg","value":1,"timestamp":"2024-02-23T05:51:19Z"}

但随后尝试访问数据返回 null 行

SELECT
   ex.raw->>'type'
FROM 
   "Example" ex

试过了

转换为 json 和 jsonb

SELECT
   ex.raw::json->>'type'
FROM 
   "Example" ex

如有任何帮助,我们将不胜感激

json postgresql psql jsonb
1个回答
0
投票

我敢打赌,您正在检查的数据库客户端只向您显示了几条记录,其中没有一个具有该密钥,这就是您得到

null
的原因。这是我重现它的方法:demo

create table "Example" (raw json);
insert into "Example" select null from generate_series(1,2e3);
insert into "Example" values
('{"type":"Eg","device":"Eg","value":1,"timestamp":"2024-02-23T05:51:19Z"}')
returning jsonb_pretty(raw::jsonb);
jsonb_pretty
{
    “类型”:“例如”,
    “值”:1,
    “设备”:“例如”,
    “时间戳”:“2024-02-23T05:51:19Z”
}

这是 PGAdmin、DataGrip、DBeaver 可以做的事情:在末尾添加一个

LIMIT
子句。由于我首先在表中填充了 2000 个空条目,因此我不会看到在这些条目之后输入的值。

SELECT
   ex.raw->>'type'
FROM 
   "Example" ex
LIMIT 3;
?栏?

如果您要求订购

nulls last
,您将首先得到非空的。

SELECT
   ex.raw->>'type'
FROM 
   "Example" ex
ORDER BY 1 NULLS LAST
LIMIT 3;
?栏?
例如
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.