sql - 将字符串化的 json 对象转换为 jsonb 对象的 Postgres 查询

标签 sql json postgresql

假设 json 对象是 > { "foo": "bar"} 在 stringyfing 之后我得到了 > "{\"foo\":\"bar\"}"

如何使用 UPDATE sql 查询取回原始 json 对象?

enter image description here

我知道这是一个糟糕的数据库架构,它是由我之前的另一位工程师设计的,这就是为什么我想取回原始 json 数据,然后将列更改为 jsonb

更新: 请注意,我正在寻找仅使用 sql 查询而不涉及任何编程语言(如 javascript.. 等)的答案

最佳答案

我能够通过执行一些正则表达式替换来解决同样的问题。您可能不需要 where 子句,但就我而言,我有一个错误开始对 JSONB 列进行字符串化,因此只有我的一些数据需要应用此更改。

update your_table 
    set text = 
        jsonb(regexp_replace(regexp_replace(regexp_replace(text::text, '"$', ''),  '^"+', ''), '\\"', '"', 'g')) 
    where text->>'foo' is null;

关于sql - 将字符串化的 json 对象转换为 jsonb 对象的 Postgres 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301317/

相关文章:

sql - 在 postgresql 的单个查询中使用 WITH + DELETE 子句

node.js - 使用 Node.js 连接到 Heroku 上的 postgres

java - jsp中分页公告板的sql

php - 添加 Symfony 应用程序时出现 JSON_ERROR

Django 通用外键 - 考虑到 SQL 性能是好是坏?

javascript - Typescript - 从数组数据中创建 Json 对象

c++ - 将 gson 移植到 C++ 的努力或计划

sql - 无冗余获取SQL Server的约束列表

MySQL 对许多使用 CASE WHEN 的 SUM() 进行平均——有更好的方法吗?

mysql - 如何替换多列中存在的值?