读取json本地js处理输出html,JavaScript 通过浏览器导出和读取本地 JSON 文件
最近我准备给我的博客主题增加一个备份主题配置的功能,我使用的方案是通过导出主题的设置来备份。因为不需要导入数据库,所以可以直接通过 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 文件相关推荐
- js 页面输出html,javascript中如何输出?
面对刚刚学习JavaScript的同学们,你是否知道JavaScript如何输出?下面本篇文章就来给大家介绍一下javascript的几种输出方式,希望对大家有所帮助. JavaScript的输出方式 ...
- php mysql 输出csv_php使用指定编码导出mysql数据到csv文件的方法
本文实例讲述了php使用指定编码导出mysql数据到csv文件的方法.分享给大家供大家参考.具体实现方法如下: <?php /* * PHP code to export MySQL data ...
- JSON 与 JS 对象的区别
JSON 概述 JSON(JavaScript Object Notation),JS 对象表示法. JSON 是 JS 对象的一种描述方式,使 JS 对象能够以文本的方式记录下来,所以 JSON 是 ...
- jq输出html 单引号引号转义符,javascript - 由于JSON中的单引号转义,jQuery.parseJSON抛出“无效的JSON”错误...
根据JSON网站上的状态机图,只允许转义双引号字符,而不是单引号. 单引号字符不需要转义: 更新 - 有兴趣的人的更多信息: Douglas Crockford没有具体说明为什么JSON规范不允许字符 ...
- 微信小程序引用本地js里的json数据
1.data.js(本地js里的json数据),位于项目更目录下 var data = [{"name": "女装","foods": [{ ...
- Javascript学习笔记——JSON:js对象简谱
Javascript不仅是一种编程语言,还被作为一种常用的对象存储和传输格式 JSON:JS 对象简谱 JSON(JavaScript Object Notation)即Javascript对象简谱 ...
- js中输出html代码怎么写,JavaScript输出语句
JavaScript输出语句 JavaScript 可以通过不同的方式来输出数据: 使用 window.alert() 弹出警告框. 使用 document.write() 方法将内容写到 HTML ...
- 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session
1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...
- 内置对象的API Array数组对象 String字符串对象 json字符串 JSON对象 js作用域及变量预解析 引用类型与值类型区别 共享引用 基本包装类型 数组去重
01-内置对象的API a.Date对象获取时间 b.Array对象数组加工 c.String对象字符串加工 d.json字符串的语法格式 e.JSON对象的字符串与对象转换应用 02-JS作用域 a ...
- JSON与js对象序列化
JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...
最新文章
- Oracle note 基礎入門篇1
- 关于Mybatis查询结果的封装
- excel取整函数_Excel中的这些烧脑问题,你遇到过几种?
- 【ACM】最长公共子序列 - 动态规划
- spring mvc 模拟数据库实现注册 登录
- 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
- Swagger如何测试Date类型参数
- linux查看日志文件内容命令tail、cat、tac、head、echo、vi
- Anaconda 3 详细安装教程
- mysql 四种隔离级别
- 继承与data member之虚拟继承
- Tribon参数化建模之__对型材端切的参数化建模解析
- AD603+MCP4725+STM32-----自动增益控制电路
- 博客美化总结(持续更新)
- 自己动手搭建网站:域名和云服务器选购
- 关于华为手机P20pro装包时总提示冲突问题
- 传说中可“免费白拿”的无线路由器 - 斐讯 K2 最简单刷 breed 与第三方固件教程
- PS从入门到精通第2节——揭开PS的神秘面纱
- 在Java代码中设置布局/控件
- java word apache poi 操作word模板。