簡體   English   中英

Postgres 9.5更新內部json字段

[英]Postgres 9.5 update inner json field

我有一個json列。 該對象具有嵌套字段,例如

{
  "logo": {
    "url": "https://foo.bar"
    ...
  }
  ...
}

該對象具有更多字段,但是url字段是我要更新的字段。 我相信我應該使用json_set之類的東西,但是我對json路徑迷失了。 我可以舉個例子嗎?

您不能僅使用jsonb使用json來做到這jsonb (但是您可以輕松地轉換現有值)

使用jsonb_set您需要提供要更改的對象的路徑,因此應為'{logo,url}'

下列:

with t (data) as (
  values
    ('{
        "logo": { "url": "https://foo.bar", "something" : "some value"}, 
        "other" : { "one": "two"}
      }'::jsonb
    )
)
select jsonb_set(data, '{logo,url}', to_jsonb('http://bar.foo'::text))
from t;

WITH部分僅用於生成偽數據)

收益:

jsonb_set                                                                              
---------------------------------------------------------------------------------------
{"logo": {"url": "http://bar.foo", "something": "some value"}, "other": {"one": "two"}}

如您所見,僅url屬性被替換,其他所有內容保持原樣。

如果您的專欄確實是json,請使用your_column::jsonb以便可以使用jsonb_set()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM