给定 Postgresql 中的一个表,其定义大致如下:
Column | Type | Modifiers | Storage | Stats target | Description
-------------+-----------------------------+-----------+----------+--------------+-------------
id | character varying | not null | extended | |
answers | json | | extended | |
Run Code Online (Sandbox Code Playgroud)
我们不小心在这个数据库中插入了一些双重编码的 JSON 对象,即 json 值是一个字符串,即一个 json 编码的对象——例如:
"{\"a\": 1}"
我们希望找到一个查询,将这些值转换为它们表示的 JSON 对象,例如:
{"a": 1}
我们可以通过执行以下操作轻松选择不良值:
SELECT * FROM table WHERE json_type(answers) = 'string'
但我们在想出一种在 PSQL 中解析 JSON 的方法时遇到了困难。
不幸的是,没有json[b]直接针对类型的字符串提取函数,但您可以通过将值嵌入 JSON 数组并使用数组索引->>处的字符串提取运算符来解决此问题0:
UPDATE table
SET answers = (CONCAT('[', answers::text, ']')::json ->> 0)::json
WHERE json_type(answers) = 'string'
Run Code Online (Sandbox Code Playgroud)
这也应该适用于较低版本的 PostgreSQL (9.3)。对于较新的版本(9.4+),您也可以使用该json_build_array()功能。
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |