首页 > 解决方案 > PostgreSQL - 查询 JSON 并替换 JSON 值

问题描述

在 Postgres DB 中,其中一列在下面发布了此 JSON 数据。

当我对该列进行“选择”查询时 - 我想用 lib-One- 和 lib-Six- 等替换“lib-One-5dc422e9f21531f9dbc16fd0”和“lib-Six-5dc422e9f21531f9dbc16fd0”的 JSON 值。

我是 postgres 的新手,并且一直试图解决这个问题。

基本上lib-*-[0-9]只替换任何值lib-*-

{
   "data":{
      "Library":{
         "Checkout":{
            "invoiceId":"12dfdf454546",
            "checkoutDetail":{
               "invoiceTransactionId":"5ab422e9f21531f9dbc16fd6",
               "invoicePaymentDetail":{
                  "objectId":"lib-One-5dc422e9f21531f9dbc16fd0",
                  "checkoutPeriods":[
                     {
                        "startDate":"2017-04-14T19:00:00.000",
                        "endDate":"2017-05-19T19:00:00.000"
                     }
                  ],
                  "invoice":{
                     "objectId":"lib-Six-5dc422e9f21531f9dbc16fd0",
                     "checkObject":true
                  }
               }
            }
         }
      }
   }
}

标签: sqljsonpostgresql

解决方案


演示:db<>小提琴

我会用字符串上的 RegEx 函数来解决它:

SELECT
      regexp_replace('<your data>'::text, '"(lib-.*?-)(.*?)"', '"\1"', 'g')::json as a
  1. 将 JSON 对象转换为字符串
  2. 替换相关部分:可以使用第二个参数找到这些部分,该参数给出每个匹配的两个组。替换字符串只是第一个。
  3. 将结果重新转换为 JSON

推荐阅读