pgsql中json格式數組查詢結果變成了字符串


場景復原

最近使用到了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[];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM