場景復原
最近使用到了json的數組,用來存儲多個文件的值,發現在連表查詢的時候返回結果變成了字符串。
{ "id": "repl-placeholder-007", "sn": "63165580943163393", "name": "1212", "implementPlanID": "2632920653191188481", "auditLeaderID": "1000", "auditLeaderInfo": null, "status": "draft", "deleted": false, "userID": "10000", "userInfo": null, "appInstanceID": "88888888", "createdAt": "repl-placeholder-008", "updatedAt": "repl-placeholder-009", "auditImplementPlan": { "id": "repl-placeholder-010", "sn": "", "auditName": "1212", "createdAt": "repl-placeholder-011", "updatedAt": "repl-placeholder-012", "annualPlanID": "1", "auditType": "all", "auditLeaderID": "12", "auditDate": "repl-placeholder-031", "remark": "", "deleted": false, "createdBy": "1000", "appInstanceID": "1212", "attaches": "[\"jimeng.io\",\"baidu.com\"]" "attaches": [ "jimeng.io", "baidu.com" ] }, "attaches": "[\"jimeng.io\",\"baidu.com\"]" "attaches": [ "打豆豆.io", "baidu.com" ] }
}
我們發現attaches被轉換成了字符串,但是我attaches字段明明定義的是json類型的,但是返回 結果變成了字符串。
我們來看下數據庫的字段
ADD COLUMN "attaches" text NOT NULL DEFAULT '[]'::jsonb;
可以看到用的是json類型
還有就是在查詢的時候使用了to_json
這是to_json的函數的文檔描述
把值返回為json或者jsonb。數組和組合被(遞歸地)轉換成數組和對象;否則, 如果有從該類型到json的投影,將使用該投影函數來執行轉換; 否則將產生一個標量值。對任何一個數值、布爾量或空值的標量類型, 將使用其文本表達,以這樣一種方式使其成為有效的json或者jsonb值。~~~~
所以這是正常的情況,但是我們需要的是以數組的形式輸出。這是發現 attaches字段用的是text字段,也就是文本字段,他可能就是導致問題出現的原因, 於是更改了字段的類型為jsonb,發現解決了,attaches的輸出已經正常了。
當然這種操作還有一個改進的辦法,就是使用數組,而不是json數組,這樣也不會出現這些問題了。
ADD COLUMN "attachess" text[] DEFAULT '{}'::text[];