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

时间:2018-04-21 16:40:51

标签: sql json postgresql

我有一个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>

请帮助!!!

1 个答案:

答案 0 :(得分: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;
$$