簡體   English   中英

在PSQL中刪除雙重編碼的JSON值

[英]Removing double-encoded JSON values in PSQL

給定Postgresql中的表,大致定義如下:

   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的方法時遇到了麻煩。

不幸的是, json[b]類型沒有直接的字符串提取功能,但你可以通過在JSON數組中嵌入值並使用->>運算符在0數組索引處進行字符串提取來解決這個問題:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM