假设json对象是> {“foo”:“bar”} 在stringyfing之后,我得到了> “{\”foo \“:\”bar \“}”
如何使用UPDATE sql查询返回原始json对象?
我知道这是一个糟糕的数据库架构,它是由我之前的另一位工程师设计的,这就是为什么我想要取回原始的json数据,然后将列更改为jsonb
更新 请注意,我正在寻找一个答案来做到这一点只有SQL查询,没有任何涉及编程语言,如javascript ..等
答案 0 :(得分:0)
我能够通过执行一些正则表达式替换来解决相同的问题。您可能不需要where子句,但就我而言,我有一个错误开始对JSONB列进行字符串化,因此仅部分数据需要应用此更改。
update your_table
set text =
jsonb(regexp_replace(regexp_replace(regexp_replace(text::text, '"$', ''), '^"+', ''), '\\"', '"', 'g'))
where text->>'foo' is null;
答案 1 :(得分:-2)
你可以to_json('{ \"foo\": \"bar\" }'::text)
所以它会像
update yourtable set yourjsoncolumn = to_json(yourjsoncolum::text)