JSON是一种轻量级的数据交换格式,能够将数据以文本的形式进行传输。然而,JSON的基本类型不包括二进制数据。在实际的应用场景中,我们经常需要传输图片、音频等二进制数据。那么,如何用JSON来传输这些数据呢?
// 传统的方式:使用Base64编码后传输 var imageData = new Uint8Array(binaryData); var base64Image = btoa(String.fromCharCode.apply(null, imageData)); var json = { "image": base64Image }; // 使用Blob对象来传输二进制数据 var blob = new Blob([binaryData], {type: "application/octet-stream"}); var reader = new FileReader(); reader.readAsDataURL(blob); reader.onload = function() { var base64Image = reader.result; var json = { "image": base64Image }; }
传统的方式是先将二进制数据转换成Base64编码的字符串,然后在JSON中传输。这种方式虽然简单,但是会增加数据大小,降低传输效率。在性能要求较高的场景中,我们可以使用Blob对象来传输二进制数据。Blob对象是一种二进制数据的容器,可以直接传输二进制数据,而不需要将其转换成文本形式。在发送端,我们可以使用FileReader对象将Blob对象读取成Base64编码的字符串,然后将其放入JSON中传输。在接收端,我们需要对Base64编码的字符串进行解码,得到原始的二进制数据。