最近在開發后端應用時,遇到了一個奇怪的問題:將byte類型的數據放到json中傳輸時,數據變得很奇怪。
byte[] bytes = new byte[]{1, 2, 3}; JSONObject json = new JSONObject(); json.put("bytes", bytes); System.out.println(json.toString());
上面的代碼中,我們定義了一個byte數組,然后將其放到了JSONObject中,并將json輸出到控制臺中。結果卻發現,輸出的json中bytes對應的值變成了一串看似無意義的字符串,而不是原本的byte數組。
{"bytes":"AQID"}
這是因為在JSON中,字符串只支持Unicode字符集,而不支持二進制數據。因此,在將byte數組放入JSONObject中時,系統會默認將其轉化為字符串。
那么,我們該如何處理這種問題呢?一個常見的解決方案是將byte數組先進行base64編碼,然后將其放入JSONObject中,這樣在發送到客戶端后,客戶端再將其進行base64解碼即可。
byte[] bytes = new byte[]{1, 2, 3}; JSONObject json = new JSONObject(); json.put("bytes", Base64.getEncoder().encodeToString(bytes)); System.out.println(json.toString());
使用關聯的base64編碼方式,我們可以將byte數組成功地放入JSONObject中,并保持其完整性。
{"bytes":"AQID"}
至此,我們將byte放入json變成了字符串的問題得到了解決。使用base64編碼可以將byte數組成功地轉化為字符串,并在傳輸中保持其完整性。