首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres -将JSON对象中的所有值更新为文本

Postgres -将JSON对象中的所有值更新为文本
EN

Stack Overflow用户
提问于 2022-08-22 13:25:54
回答 2查看 85关注 0票数 1

我有一个包含不同键的JSON列的表,其中的一些值是数字,但我希望所有的值都是文本。例如,我有{"budget": 500, "budget_id": 100, ...[dozens more keys]},但我希望它是{"budget":"500", "budget_id": "100"}。我希望有一个查询能够盲目地返回一个JSON对象,该对象的值都是文本。与…有关的东西:

代码语言:javascript
复制
UPDATE my_table
SET data = data || --python-sql psuedo-code -> [key:quote_literal(value) for key in data.keys()];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-22 13:40:44

这就是了。首先,使用json_each_text (值作为文本)将JSON扁平化为一组键值对,然后使用json_object_agg将其聚合回JSON。

代码语言:javascript
复制
update my_table
set data = (select json_object_agg(key, value) from json_each_text(data));

这种方法也可以用于其他转换。

最好是创建一个视图,而不是修改原始数据:

代码语言:javascript
复制
create view my_table_v as 
 select <the other fields>, 
        (select json_object_agg(key, value) from json_each_text(data)) as data 
 from my_table;
票数 1
EN

Stack Overflow用户

发布于 2022-08-22 14:42:22

我认为,基于Postgres - Update all values in a JSON object to be text中先前给出的有帮助的答案,我能够调整查询:

代码语言:javascript
复制
update my_table orig
set data = text_table.text_data from (
    select same_as_orig.id, json_object_agg(k, v) text_data          
    from my_table same_as_orig, json_each_text(data::json) _(k, v)
    group by same_as_orig.id
    ) text_table
where orig.id = text_table.id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73445902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档