sql - 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
}
}
}
}
}
}
}
解决方案
我会用字符串上的 RegEx 函数来解决它:
SELECT
regexp_replace('<your data>'::text, '"(lib-.*?-)(.*?)"', '"\1"', 'g')::json as a
- 将 JSON 对象转换为字符串
- 替换相关部分:可以使用第二个参数找到这些部分,该参数给出每个匹配的两个组。替换字符串只是第一个。
- 将结果重新转换为 JSON
推荐阅读
- javascript - Mapbox-gl-js 自定义图层 - 使用threejs 渲染器清除时背景地图变白
- matlab - 为什么我的 MATLAB 程序不能执行 if 语句块?
- python - 如何循环遍历具有差异行的表?例如这是输入 ([[0,4],[2,4],[-1,3]] 我想要的输出是这个 [[0,1.5],[2,1.5],[1.5,3] ]
- ios - 重命名Xcode项目flutter后无法构建iOS
- opencv - 如何在特定距离内沿边缘填充颜色
- css - 为什么 mdbootstrap 列没有占用整个页面的响应宽度?
- python - Django:实现多个用户级别/角色/类型
- bash - 获取bash 4中数字范围部分匹配的文件列表
- node.js - DynamoDB 使用 conditionExpression 而不是键更新项目
- javascript - 单击时无法执行旋转