使用变量作为postgresql中的键来访问json对象

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

我有一个json poll_result

{"total_votes":1,"yes":1,"no":0}

我有一个具有密钥的变量

vote_to = _poll_response::json#>>'{vote}';

并返回"yes"

现在我想根据vote_to变量的值访问poll_result json,所以我正在尝试

raise notice '%',poll_result::json#>>'{||vote_to||}';

但这是印刷<NULL>。即使我尝试过

raise notice '%,%',poll_result,poll_result::json#>>'{''||vote_to||''}';

但结果是相同的<NULL>

请帮忙!!!

sql json postgresql
1个回答
1
投票

请参阅有关如何使用->>#>>运算符的变量的示例:

do $$
declare
    pool_result json = '{"total_votes":1,"yes":1,"no":0}';
    vote_to text = 'yes';
begin
    raise notice 'yes: %', pool_result ->> vote_to;
    -- or
    raise notice 'yes: %', pool_result #>> array[vote_to]; 
end;
$$

NOTICE:  yes: 1
NOTICE:  yes: 1

如果变量的值是双引号,你应该修剪它们:

do $$
declare
    pool_result json = '{"total_votes":1,"yes":1,"no":0}';
    vote_to text = '"yes"';
begin
    raise notice 'yes: %', pool_result ->> trim(vote_to, '"');
    -- or
    raise notice 'yes: %', pool_result #>> array[trim(vote_to, '"')]; 
end;
$$
© www.soinside.com 2019 - 2024. All rights reserved.