2017-03-17 22 views
1

卸下雙重編碼JSON值,大約定義如下:在給定PostgreSQL中表PSQL

Column |   Type    | Modifiers | Storage | Stats target | Description 
-------------+-----------------------------+-----------+----------+--------------+------------- 
id   | character varying   | not null | extended |    | 
answers  | json      |   | extended |    | 

我們意外做了數插入物至該數據庫雙重編碼的JSON對象,即,JSON值是一個字符串,這是一個JSON編碼的對象 - 例如:

"{\"a\": 1}"

我們想找到一個查詢,將這些值轉換成他們所代表的JSON對象,例如:

{"a": 1}

我們可以很容易地做選擇錯誤值:

SELECT * FROM table WHERE json_type(answers) = 'string'

,但我們有想出一個方法來解析在PSQL的JSON麻煩。

回答

3

Unfortunaly,存在用於json[b]類型直接沒有字符串提取功能,但是可以通過使用->>運算符串提取的0數組索引處嵌入JSON陣列&內的值解決此:

UPDATE table 
SET answers = (CONCAT('[', answers::text, ']')::json ->> 0)::json 
WHERE json_type(answers) = 'string' 

這也適用於較低的PostgreSQL版本(9.3)。對於更新的版本(9.4+),您也可以使用json_build_array() function

+0

哈哈!我喜歡這個 –

+0

英雄,你是英雄。 – mberacochea