【问题标题】:Modify field inside of Jsonb in Postgres在 Postgres 中修改 Jsonb 内部的字段
【发布时间】:2020-03-04 15:26:33
【问题描述】:

我正在浏览 Postgres Jsonb 文档,但无法为我遇到的一个小问题找到解决方案。

我有一张桌子:MY_TABLE

具有以下列:

用户、姓名、数据和购买

需要注意的一点是“Data”是一个jsonb并且有多个字段。 “数据”中的一个字段是“属性”,但它目前是一个字符串。如何将其更改为字符串列表?

我尝试过使用 json_build_array 但没有任何运气

例如,我希望我的 jsonb 看起来像:

   {
       "Id": 1,
       "Attributes": ["Test"]

   }

而不是

{
    "Id": 1,
    "Attributes": "Test"

}

我只关心 Json 内部的“属性”字段,而不关心任何其他字段。

【问题讨论】:

  • 请提供样本数据和预期结果。
  • @GMB 刚刚更新了问题,感谢回复

标签: sql arrays json postgresql jsonb


【解决方案1】:

您可以使用jsonb_set()jsonb_build_array() 执行此操作,如下所示:

jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes'))

Demo on DB Fiddle

with t as (select '{ "Dd":1, "Attributes":"Test"}'::jsonb js)
select 
    js, 
    jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes')) new_js
from t
js | new_js :-------------------------------- | :-------------------------------- {“Dd”:1,“属性”:“测试”} | {“Dd”:1,“属性”:[“测试”]}

【讨论】:

  • 非常感谢 - 您知道我如何在您提供的查询中使用我的表吗?我已经用 MY_TABLE.data 替换了 '{ "Id:1, "Attributes : "Test"}' 但遇到了语法问题。
  • @blazerix: select jsonb_set(data, ...) from mytable
  • 我有以下内容:with t as (select jsonb_set(data) from public.mytable as js) select js, jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes')) new_js from t 但它说函数 jsonb_set 不存在
  • @blazerix:没有。只是:select data, jsonb_set(data, '{Attributes}', jsonb_build_array(data ->> 'Attributes')) new_data from mytable.
  • 非常感谢,这就是我要找的。我会详细阅读 jsonb_set 和 jsonb_build_array 以便我有更清晰的理解。
猜你喜欢
  • 1970-01-01
  • 2017-01-08
  • 2020-07-01
  • 1970-01-01
  • 2021-03-16
  • 2020-09-01
  • 2015-10-06
  • 1970-01-01
  • 2018-05-23
相关资源
最近更新 更多