尝试从 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
如有任何帮助,我们将不胜感激
我敢打赌,您正在检查的数据库客户端只向您显示了几条记录,其中没有一个具有该密钥,这就是您得到
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;
?栏? |
---|
例如 |
空 |
空 |