2023年2月27日更新:
时隔3年,这篇博客现在仍时常有小伙伴访问。
但是本博客内容在我现在看来质量一般,因此重写了一篇更简单更高效的版本
可以直接跳转这篇《新手如何使用JavaScript读取json文件 v2.0》
使用JavaScript读取json文件
- 前言
- 正式开始
- 前提条件
- 终于可以开始了
- 全部代码
前言
最近尝试使用js读取json文件,并调用json的数据。在网上找到各种大佬写的教程,拷贝到自己电脑上就各种报错,对于新手来说不太友好。经过一个下午的时间终于搞定,自己走了很多弯路,所以在这里做个记录,希望帮助到js新手少走弯路,欢迎大佬批评指正~
正式开始
前提条件
网上最多的方法就是让使用ajax读取,但是我自己一用,浏览器就报错
通过查资料才知道,原来是因为没有引入jquery,需要在head中引入jquery
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Text</title>
<!-- 引入jquery -->
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>//
</head>
终于可以开始了
json数据如下
[
{
"year": 2011,
"province": "湖北",
"city": "武汉",
"housingprise": 7954
},
{
"year": 2011,
"province": "河南",
"city": "郑州",
"housingprise": 6566
},
{
"year": 2020,
"province": "湖北",
"city": "武汉",
"housingprise": 15998
},
{
"year": 2020,
"province": "河南",
"city": "郑州",
"housingprise": 13597
}
]
下面开始读取json数据
总共尝试了三种方法,这里一一进行介绍
- 方法一
代码如下
//方法1
var data = $.parseJSON($.ajax({
url: "textJsonData.json",//json文件位置,文件名
dataType: "json", //返回数据格式为json
async: false
}).responseText);
console.log(data);
//此方法会报错:主线程中同步的 XMLHttpRequest 已不推荐使用,因其对终端用户的用户体验存在负面影响
运行结果就是也能执行,但是浏览器会发出警告
网上查的方法让把
async: false
改成
async: true
但是改完了数据直接无法读取了,这里不找到为什么,知道原因的请告诉我
出于强迫症,肯定不能允许这种情况的出现,于是转向方法二
- 方法二
代码如下
//方法二
var Ajax = function () {
$.getJSON("textJsonData.json", function (data) {
console.log(data);
});
}();
//此方法只能在内部访问数据
运行结果如下,可以正确读取
但是此方法只能在$.getJSON内部访问数据,在外部无法获取,解决方法是:可以在内部传入一个函数,而函数体写在外部
于是,将上面的代码改成
var Ajax = function () {
$.getJSON("textJsonData.json", function (data) {
displayData(data)//传入一个函数
});
}();
在外部定义displayData函数
var displayData= function(data){
console.log(data);
}
- 方法三
与方法2类似,也需要用到外部的displayData函数,也是被最多人推荐的方法,代码如下
//方法三
$.ajax({
url: "textJsonData.json",
type: "GET",
dataType: "json",
success:
function (data) {
displayData(data)
}
});
//类似于方法二
同样正确读取数据
全部代码
希望对大家起到帮助,欢迎大家批评指正!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Text</title>
<!-- 引入jquery -->
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</head>
<body>
<h1>测试</h1>
<script>
//方法1
var data = $.parseJSON($.ajax({
url: "textJsonData.json",//json文件位置,文件名
dataType: "json", //返回数据格式为json
async: false
}).responseText);
console.log(data);
//此方法会报错:主线程中同步的 XMLHttpRequest 已不推荐使用,因其对终端用户的用户体验存在负面影响
//方法二
var Ajax = function () {
$.getJSON("textJsonData.json", function (data) {
displayData(data)//传入一个函数
});
}();
//此方法只能在内部访问数据
var displayData= function(data){
console.log(data);
}
//方法三
$.ajax({
url: "textJsonData.json",
type: "GET",
dataType: "json",
success:
function (data) {
displayData(data)
}
});
//类似于方法二
</script>
</body>
</html>