我需要将两个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所需的参数告诉我,第二个参数应该是数组类型,但我不知道如何将该字符串转换为数组才能使其工作。
谁能告诉我如何在jsonb对象中将一个值附加到另一个值,其中两者的键都在动态位置上?
发布于 2019-10-01 15:07:04
将您的路径转换为text[]
类型
SELECT
'{"a": {"b": {"c": "d"}}}'::jsonb #> ('{"a","' || path || '","c"}')::text[]
FROM
mytable
发布于 2019-10-01 15:05:45
select '{"a": {"b": {"c": "d"}}}'::jsonb #>> ('{"a","'||'b'||'","c"}')::text[];
这是可行的,所以我需要强制转换为text[]。这是可行的!
https://stackoverflow.com/questions/58187549
复制相似问题