首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一行转换为json时,将所有数值类型的列强制转换为文本

将一行转换为json时,将所有数值类型的列强制转换为文本
EN

Stack Overflow用户
提问于 2022-01-18 09:31:25
回答 2查看 383关注 0票数 1

我有带有numeric/decimal列的表,我正在将行转换为json

代码语言:javascript
复制
select to_jsonb(t.*) from my_table t

在转换为json之前,我需要将numeric列转换为文本。

我之所以需要这样做,是因为JavaScript不能很好地处理大的数字,所以我可能会失去精度。我使用decimal.js,字符串表示是构造decimal.js数字的最佳方法。

我知道我能做到

代码语言:javascript
复制
select to_jsonb(t.*) || jsonb_build_object('numeric_column', numeric_column::text) from my_table t

但我想让它自动完成。在传递到numeric函数之前,是否有一种方法可以将所有to_jsonb列转换为文本?

它可以是用户定义的postgres函数。

编辑:只是为了澄清我的问题。我需要的是一些类似于to_jsonb的函数,除了numeric/decimal类型的所有列都存储在结果JSON中的string之外。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-01-18 16:40:12

您可以运行如下查询:

代码语言:javascript
复制
select row_to_json(row(t.column1,t.column2,t.column_numeric::text)) from my_table t

结果在这里

票数 0
EN

Stack Overflow用户

发布于 2022-01-18 21:14:31

此解决方案将所有json值转换为文本:

代码语言:javascript
复制
SELECT jsonb_object_agg(d.key, d.value)
  FROM my_table AS t
 CROSS JOIN LATERAL jsonb_each_text(to_jsonb(t.*)) AS d
 GROUP BY t

然而,此解决方案只将json数字转换为文本:

代码语言:javascript
复制
 SELECT jsonb_object_agg(d.key, CASE WHEN jsonb_typeof(d.value) = 'number' THEN to_jsonb(d.value :: text) ELSE d.value END)
  FROM my_table AS t
 CROSS JOIN LATERAL jsonb_each(to_jsonb(t.*)) AS d
 GROUP BY t

[医]小提琴测试结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70753241

复制
相关文章

相似问题

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