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 | /** |