JSON对象与Blob对象互相转换
前言
在某些后台业务场景下,可能需要导出或导入一些数据;而这个数据的介质就是json文件。从服务端获取到的json数据可以转为json文件并下载,而从用户导入的json文件又可以转换为json数据(对象)提交给服务端。
转换步骤
核心
无论是json数据转.json文件,还是.json文件转json数据,都离不开Blob对象的支持。
.json文件转为json数据(对象)
- 根据上传组件获取到对应的
File对象; - 将
File对象转为Blob对象; - 利用
FileReader的readAsText方法读取json数据; FileReader的onload方法会在解析成功时执行;此时该实例的result属性就是解析好的json字符串,进一步用JSON.parse()方法就能解析出json对象。
可以将上述步骤封装成一个函数:
1 | /** |
json数据(对象)转为Blob对象
由于Blob构造函数本身就支持将字符串转为文件,因此转换比较简单:
- 首先利用
JSON.stringify()方法将json对象转为json字符串; - 利用
Blob构造函数得到Blob对象(注意:需要设置文件的MIME类型);
如:
1 | const blob = new Blob([JSON.stringify(data)], { |
扩展:将Blob对象直接下载到本地
上面将json数据转换为Blob对象后,作用并不大;一个后续的使用场景可能为:将这个文件通过浏览器下载到本地。这个就需要用到createObjectURL()方法和<a>标签的download特性了。
URL.createObjectURL(blob/file):该方法可以得到一个指向Blob对象或File对象对应的二进制文件流的url地址,访问即可下载该文件;download属性:当<a>标签设置了该属性时,点击标签时浏览器不会跳转链接,而是将对应链接作为文件进行下载保存,而文件的名字就是download的属性值。
可以将上述流程封装成一个将json对象转化成文件并自动下载的函数:
1 | /** |