【问题标题】:Update integer json object to become an array with one integer更新整型 json 对象,变成一个整型的数组
【发布时间】:2020-04-03 16:10:34
【问题描述】:

我目前正在使用 psql 并尝试更新嵌入式 json 对象以将值从整数更改为具有一个值的数组(这是由于其他地方的函数发生更改)。

我的桌子是这样的:

id | dashboard_settings
-----------------------
 1 | {"query": {"year_end": 2018, "year_start": 2015, "category": 4}}

但是我希望类别位更改为 [4],如下所示:

id | dashboard_settings
-----------------------
 1 | {"query": {"year_end": 2018, "year_start": 2015, "category": [4]}}

到目前为止,我有这个允许我访问类别部分,但我不知道如何将其转换为数组:

UPDATE table
SET dashboard_settings = jsonb_set(
    dashboard_settings::jsonb, 
    array['query, category'], 
    to_jsonb(dashboard_settings->'query' ->'category'));

我尝试连接并转换为数组,但没有成功

【问题讨论】:

  • 你的数组构造函数应该是array['query', 'category']。按照您编写的方式,它只是一个单元素数组。你也可以使用'{query, category}'

标签: json postgresql sql-update psql


【解决方案1】:

Click: demo:db<>fiddle

你可以用jsonb_build_array()代替to_jsonb()

UPDATE mytable
SET dashboard = s.out
FROM (
    SELECT
        jsonb_set(
            dashboard, 
            '{query, category}', 
            jsonb_build_array(dashboard -> 'query' -> 'category')
        ) AS out
    FROM mytable
    WHERE id = 1;
) s
WHERE id = 1;

【讨论】:

  • 您是否有理由删除接受和支持?有什么问题吗?应该改变什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 2019-02-25
相关资源
最近更新 更多