最近我准备给我的博客主题增加一个备份主题配置的功能,我使用的方案是通过导出主题的设置来备份。因为不需要导入数据库,所以可以直接通过 JS 获取表单内容,然后导出为 JSON。导入配置也是直接读取本地的 JSON 文件,然后根据 JSON 的配置信息设置表单。这里就简单写一下 JS 导出和读取文本文件。

导出

我需要实现的效果是点击导出后弹出一个文件下载对话框,点击 保存 或 下载 就可以导出文件。

在 HTML5 中 a 标签增加了一个 download 属性,通过 download 属性,可以直接通过文件下载对话框来下载浏览器能打开的文件。

一般情况下给 a 的 href 指定一张图片或 MP3 地址,点击链接浏览器会直接读取文件,而通过 download 属性,浏览器会直接弹出文件下载对话框。我这里导出文件也会用到 a 标签的 download 属性。

下面定义一个按钮和一个链接:导出文件

下面是 JS:var btn = document.querySelector("button"); // 选择按钮

var link = document.querySelector("a"); // 选择链接

// 用来导出的 JSON

var jsonStr = {

name: "我的博客",

url: "https://www.misterma.com/",

};

// 导出文件按钮点击

btn.onclick = function () {

jsonStr = JSON.stringify(jsonStr); // 把 JSON 对象转换为字符串

var blob = new Blob([jsonStr]); // 创建 blob 对象

link.href = URL.createObjectURL(blob); // 创建一个 URL 对象并传给 a 的 href

link.download = "config.json"; // 设置下载的默认文件名

link.click(); // 点击下载链接

};

下面是用到的一些对象和方法说明:

JSON.stringify() 方法:

把 JSON 对象转换为 JSON 字符串,如果你导出的直接就是字符串的话,就可以不用转换。

Blob() 构造函数:

Blob 对象表示一个不可变、原始数据的类文件对象。

Blob 构造函数可以返回一个 Blob 对象,参数就是要转换的内容数组。

URL.createObjectURL() 方法:

创建一个 URL 对象,返回创建后的 URL 对象,参数可以是 Blob 或 File 对象。

上面把创建的 URL 对象 赋给了 a 的 href。

点击 导出文件 按钮后就会弹出一个文件下载的对话框,默认的文件名是 config.json,点击保存或下载就可以导出文件了。

导入

导入可以通过文件表单和拖放的方式来选择文件,我这里使用的是文件表单。

下面是一个文件表单:

如果想美化文件表单 可以把文件表单隐藏,通过按钮来调用文件表单的点击方法。

下面是 JS:var fileSelect = document.querySelector('#file-select'); // 选择文件表单

// 文件表单的内容改变,也就是文件选择完成

fileSelect.onchange = function () {

if (this.value === '' || this.files.length < 1) {

return false; // 如果没有选择文件就什么也不做

}

var reader = new FileReader(); // 创建 FileReader对象

reader.readAsText(this.files[0]); // 把文件读取为字符串

// 文件加载完成

reader.onload = function(ev) {

var jsonStr = ev.target.result; // 把字符串传给 jsonStr

jsonStr = JSON.parse(jsonStr); // 把 JSON 字符串转换为 JSON 对象

console.log(jsonStr); // 在控制台输出 JSON

};

};

下面是用到的一些对象和方法说明:

FileReader() 对象:FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

FileReader 的 readAsText() 方法:

把文件读取为字符串。

FileReader 的 onload 事件:

文件读取完成后会触发 onload 事件,函数可以接收一个事件对象,事件对象的 result 属性就是读取的文件内容。

JSON.parse() 方法:

把 JSON 字符串转换为 JSON 对象,参数是要转换的 JSON 字符串,返回转换后的 JSON 对象。

之前写过一篇 预览本地图片 的教程,也是通过 FileReader 来读取文件。

以上就是 JavaScript 导出和读取文件的简单演示,上面的导出文件可以导出任何文件,不局限于 JSON。导入文件可以导入任何浏览器能读取的文件,即便是浏览器无法读取的文件也可以通过字符串的方式读取文件。

链接的 download 属性是 HTML5 中加入的,目前 IE 系列的浏览器是不支持的,即便是 IE 11 也不支持,微软的浏览器需要 Edge 才可以用。

版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。

如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。

读取json本地js处理输出html,JavaScript 通过浏览器导出和读取本地 JSON 文件相关推荐

  1. js 页面输出html,javascript中如何输出?

    面对刚刚学习JavaScript的同学们,你是否知道JavaScript如何输出?下面本篇文章就来给大家介绍一下javascript的几种输出方式,希望对大家有所帮助. JavaScript的输出方式 ...

  2. php mysql 输出csv_php使用指定编码导出mysql数据到csv文件的方法

    本文实例讲述了php使用指定编码导出mysql数据到csv文件的方法.分享给大家供大家参考.具体实现方法如下: <?php /* * PHP code to export MySQL data ...

  3. JSON 与 JS 对象的区别

    JSON 概述 JSON(JavaScript Object Notation),JS 对象表示法. JSON 是 JS 对象的一种描述方式,使 JS 对象能够以文本的方式记录下来,所以 JSON 是 ...

  4. jq输出html 单引号引号转义符,javascript - 由于JSON中的单引号转义,jQuery.parseJSON抛出“无效的JSON”错误...

    根据JSON网站上的状态机图,只允许转义双引号字符,而不是单引号. 单引号字符不需要转义: 更新 - 有兴趣的人的更多信息: Douglas Crockford没有具体说明为什么JSON规范不允许字符 ...

  5. 微信小程序引用本地js里的json数据

    1.data.js(本地js里的json数据),位于项目更目录下 var data = [{"name": "女装","foods": [{ ...

  6. Javascript学习笔记——JSON:js对象简谱

    Javascript不仅是一种编程语言,还被作为一种常用的对象存储和传输格式 JSON:JS 对象简谱 JSON(JavaScript Object Notation)即Javascript对象简谱 ...

  7. js中输出html代码怎么写,JavaScript输出语句

    JavaScript输出语句 JavaScript 可以通过不同的方式来输出数据: 使用 window.alert() 弹出警告框. 使用 document.write() 方法将内容写到 HTML ...

  8. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

  9. 内置对象的API Array数组对象 String字符串对象 json字符串 JSON对象 js作用域及变量预解析 引用类型与值类型区别 共享引用 基本包装类型 数组去重

    01-内置对象的API a.Date对象获取时间 b.Array对象数组加工 c.String对象字符串加工 d.json字符串的语法格式 e.JSON对象的字符串与对象转换应用 02-JS作用域 a ...

  10. JSON与js对象序列化

    JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...

最新文章

  1. Oracle note 基礎入門篇1
  2. 关于Mybatis查询结果的封装
  3. excel取整函数_Excel中的这些烧脑问题,你遇到过几种?
  4. 【ACM】最长公共子序列 - 动态规划
  5. spring mvc 模拟数据库实现注册 登录
  6. 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
  7. Swagger如何测试Date类型参数
  8. linux查看日志文件内容命令tail、cat、tac、head、echo、vi
  9. Anaconda 3 详细安装教程
  10. mysql 四种隔离级别
  11. 继承与data member之虚拟继承
  12. Tribon参数化建模之__对型材端切的参数化建模解析
  13. AD603+MCP4725+STM32-----自动增益控制电路
  14. 博客美化总结(持续更新)
  15. 自己动手搭建网站:域名和云服务器选购
  16. 关于华为手机P20pro装包时总提示冲突问题
  17. 传说中可“免费白拿”的无线路由器 - 斐讯 K2 最简单刷 breed 与第三方固件教程
  18. PS从入门到精通第2节——揭开PS的神秘面纱
  19. 在Java代码中设置布局/控件
  20. java word apache poi 操作word模板。

热门文章

  1. Excel函数实战技巧精粹(三)常用函数之INDEX与MATCH组合详解
  2. oracle 数据库练习题及答案
  3. 东芝笔记本linux系统安装驱动,最详实解决方案 笔记本安装驱动指南!
  4. 传奇服务器玩家信息备份,传奇:史上5大漏洞,损失惨重,盛大被迫将服务器回档2天...
  5. Cocos Creator 自制小工具-小游戏场景地图编辑器
  6. 取消开机就弹出 msn中文网 操作步骤
  7. Linux系统开发: 学习Linux下网络编程
  8. linux mint 安装ssh
  9. 迅捷PDF虚拟打印机怎么保存文件
  10. Oracle创建函数