gpt4 book ai didi

postgresql - 通过变量路径访问 JSONB 元素

转载 作者:行者123 更新时间:2023-11-29 12:39:29 24 4
gpt4 key购买 nike

我需要将两个 json 值合并为一个。但这些变量的位置是动态的,我从数据库获取 jsonb 中的位置。

所以我希望能够做这样的事情:

select '{"a": {"b": {"c": "d"}}}'::jsonb #> '{"a","b","c"}';

但是我无法让它使用变量,因为我不知道将路径转换为什么。

select '{"a": {"b": {"c": "d"}}}'::jsonb #> ('{"a","' || variable_from_database || '","c"}')::dataTypeOfJsonbPath;

我还发现我可以使用这样的查询:

select value#>>'{"c"}' from jsonb_each(('{"a": {"b": {"c": "d"}}}'::jsonb#>'{"a"}')) where key = 'b';

这将解决获取值的问题,但现在我需要将它们连接到原始 jsonb 值中,而我目前不知道如何完成此操作。

jsonb_set('{"a": {"b": {"c": "d"}}}'::jsonb, ('{"a","' || value2FromDatabase || '", "c"}'),
(value1 || value2)::jsonb, false);

由于同样的原因,上述失败。

列出 jsonb_set 所需的参数告诉我第二个参数应该是 ARRAY 类型,但我不知道如何将该字符串转换为数组以使其工作。

任何人都可以为我指明如何在 jsonb 对象中将一个值附加到另一个值(其中两个值的键都位于动态位置)的正确方向吗?

最佳答案

将路径转换为类型 text[]

demo:db<>fiddle

SELECT
'{"a": {"b": {"c": "d"}}}'::jsonb #> ('{"a","' || path || '","c"}')::text[]
FROM
mytable

关于postgresql - 通过变量路径访问 JSONB 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58187549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com