你好,这是我的json
{
"name":'test',
"options": {
"Repartition": "Active",
"Satellite": "No"
}
}
我想用's'重命名“卫星”中的“卫星”,但我没有成功。
我试过了:
UPDATE "Liaison" set content = content->>'options' - 'Satellite' || jsonb_build_object('Satellites', content->>'options'->'Satellite') where id =52056
但我有一个错误:
运算符不是唯一的:未知 - 未知
这是我的表:
ID | content
---------------------
52056 | the json
答案 0 :(得分:1)
->>
将元素作为text
返回,因此您无法在其上应用JSON运算符。您需要使用->
将(子)元素作为JSON返回,并使用jsonb_set()
更改内容中的options
元素:
UPDATE "Liaison"
set content = jsonb_set(content, array['options'],
(content -> 'options') - 'Satellite'||
jsonb_build_object('Satellites', content -> 'options' -> 'Satellite'))
where id = 52056;
-
运算符仅适用于JSONB,而不适用于JSON。因此,如果您的列确实是JSON,则需要将中间结果转换为JSONB。
在线示例:http://rextester.com/EXTS36112
另一种选择是使用jsonb_set()
创建新元素,使用#-
删除旧元素。
UPDATE liaison
set content = jsonb_set(
content,
array['options','Satellites'],
(content #> array['options','Satellite']), true
) #- array['options','Satellite']
where id = 52056;