場景:最近在寫Django,寫到購物車的時候,每次退出時,使用json格式,將購物車中的信息存儲到mysql表中,而後在用戶每次登錄時,讀取相應的數據,顯示在前端網頁。前端
一、json格式的數據,以什麼樣的字段類型存儲:node
一開始,我是用的是varchar類型進行存儲,可是發現,再登錄時,都取出來的數據變成了字符串類型,以前寫好的代碼,沒法對其進行解析;mysql
以後,選擇了json類型進行存儲,結果讀取出來也是不能用;sql
通過Google,找到了這篇博文,通過閱讀,選擇了Blob類型進行存儲;
數據庫
二、存儲後,再進行登錄,會報錯:Expecting property name enclosed in double quotes: line 1 column 2 (char 1):django
仍是進行Google,在stackoverflow中,有相關解答;(這篇問答中高票回答,個人狀況沒有使用他的json.loads(ast.literal_eval()) 這樣處理)json
出現這種錯誤,是由於json格式數據,必須使用雙引號,且最後一條數據後面沒有逗號;函數
去看了下個人mysql中的數據,在django將json數據寫入的時候,所有變爲了單引號;spa
所以,須要將讀取出來的數據進行在處理,修改成json標準格式,此時:就須要導入ast庫,使用ast.literal_eval()函數進行處理,固然可使用正則替換方式,將其中的單引號換爲雙引號;code
三、通過以上處理,運行後又出現了問題:malformed node or string: b'{"20": {"id": 20, "goodsname": "\\u795e\\u821f。。。。。
究其緣由:是由於Bolo字段類型,存儲的數據爲二進制Bytes類型的數據;
將該數據讀取出來,須要將其進行默認轉義:data.decode();
而後再進行ast.literal_eval()的處理;