繁体   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