前端纯js导入导出json配置文件

8,081 阅读1分钟

在做后台系统需求的时候,有个需求是需要把当前表单配置导出,在另一个配置项下,导入这些配置,相当于做了一下配置拷贝。

通常我们导出下载一个文件,是先向后端发起请求,由后端处理数据后,再返回文件。

调研发现,纯前端也可以实现这样的效果,而且很简单,不需要后端做处理。前端在一次拿到数据后,就可以导出数据到文件。

来个简单的 DEMO

下面来分析实现他们,同时发布了一个更易用的npm包,有需要可以直接使用: iojson 🥰

导出json文件

创建一个a标签,通过a标签的download href属性,可以实现直接下载静态数据,amazing!

let link = document.createElement('a')
link.download = 'config.json'
link.href = 'data:text/plain,' + JSON.stringify(data)
link.click()

不需要过多解释,参考传送门:使用 download 属性将 canvas 保存为 PNG 格式 - MDN

导入json文件

// 创建一个file input
let input = document.createElement('input')
input.type = 'file'

// 绑定onchange事件
input.onchange = (event) => {
  let files = event.target.files
  if (!files || !files.length) {
    input = null
    throw new Error('No files')
  }

  // 当选择文件后,使用FileReader API读取文件,返回数据
  let reader = new FileReader()
  reader.onload = (event) => {
    try {
      let config = JSON.parse(event.target.result)
      return config
    } catch (e) {
      throw new Error(e)
    }
    input = null
  }
  reader.readAsText(files[0])
}

// 触发上传文件
input.click()

参考: Using_files_from_web_applications - MDN