[英]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.