重命名JSON中的属性

时间:2018-02-05 11:17:31

标签: sql json postgresql

你好,这是我的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

1 个答案:

答案 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;