![](/img/trans.png)
[英]REST API service returning JSON, but Chrome showing double-encoded
[英]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.