我已经在我的本地系统中保存了一个JSON文件,并创建了一个JavaScript文件,以便读取JSON文件并打印数据。以下是JSON文件:
{"resource":"A","literals":["B","C","D"]}
假设这是JSON文件的路径:/Users/Documents/workspace/test.json。
谁能帮我写一段简单的代码来读取JSON文件并用JavaScript打印数据?
我已经在我的本地系统中保存了一个JSON文件,并创建了一个JavaScript文件,以便读取JSON文件并打印数据。以下是JSON文件:
{"resource":"A","literals":["B","C","D"]}
假设这是JSON文件的路径:/Users/Documents/workspace/test.json。
谁能帮我写一段简单的代码来读取JSON文件并用JavaScript打印数据?
当前回答
上面提到的所有解决方案只有在本地主机上运行本地web服务器时才有效。如果你想要在没有web服务器的情况下实现这一点,你可能需要通过使用文件上传控制来手动上传JSON文件。由于安全风险,如果没有本地服务器,浏览器将不提供此功能。
你也可以在没有本地服务器的情况下解析上传的文件。这里是示例代码,我已经实现了一个解决类似的问题。
<div id="content">
<input type="file" name="inputfile" id="inputfile">
<br>
<h2>
<pre id="output"></pre>
</h2>
</div>
<script type="text/javascript">
document.getElementById('inputfile')
.addEventListener('change', function () {
let fileReader = new FileReader();
fileReader.onload = function () {
let parsedJSON = JSON.parse(fileReader.result);
console.log(parsedJSON);
// your code to consume the json
}
fileReader.readAsText(this.files[0]);
})
</script>
在我的情况下,我想读取一个本地JSON文件,并在桌面上的html文件中显示它,这就是我所要做的。
注意:不要尝试使用JavaScript自动上传文件,由于浏览器施加的安全限制,即使这样做也是不允许的。
其他回答
正如许多人之前提到的,使用AJAX调用这是行不通的。然而,有一种方法可以绕过它。使用input元素,可以选择您的文件。
所选文件(.json)需要有这样的结构:
[
{"key": "value"},
{"key2": "value2"},
...
{"keyn": "valuen"},
]
<input type="file" id="get_the_file">
然后你可以使用FileReader()使用JS读取文件:
document.getElementById("get_the_file").addEventListener("change", function() {
var file_to_read = document.getElementById("get_the_file").files[0];
var fileread = new FileReader();
fileread.onload = function(e) {
var content = e.target.result;
// console.log(content);
var intern = JSON.parse(content); // Array of Objects.
console.log(intern); // You can index every object
};
fileread.readAsText(file_to_read);
});
取决于您的浏览器,您可以访问您的本地文件。但这可能并不适用于应用程序的所有用户。
要做到这一点,您可以尝试这里的说明:http://www.html5rocks.com/en/tutorials/file/dndfiles/
一旦你的文件加载,你可以检索数据使用:
var jsonData = JSON.parse(theTextContentOfMyFile);
您不能对本地资源进行AJAX调用,因为请求是使用HTTP发出的。
一个解决方案是运行一个本地web服务器,提供文件并对localhost进行AJAX调用。
为了帮助你编写代码来读取JSON,你应该阅读jQuery.getJSON()的文档:
http://api.jquery.com/jQuery.getJSON/
我喜欢上面Stano/Meetar的评论。我用它来读取.json文件。 我使用Promise扩展了他们的例子。 这是同样的活塞。 https://plnkr.co/edit/PaNhe1XizWZ7C0r3ZVQx?p=preview
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
callback(rawFile.responseText);
}
}
rawFile.send(null);
}
//usage:
// readTextFile("DATA.json", function(text){
// var data = JSON.parse(text);
// console.log(data);
// });
var task1 = function (){
return new Promise (function(resolve, reject){
readTextFile("DATA.json", function(text){
var data = JSON.parse(text);
console.log('task1 called');
console.log(data);
resolve('task1 came back');
});
});
};
var task2 = function (){
return new Promise (function(resolve, reject){
readTextFile("DATA2.json", function(text){
var data2 = JSON.parse(text);
console.log('task2 called');
console.log(data2);
resolve('task2 came back');
});
});
}
Promise.race([task1(), task2()])
.then(function(fromResolve){
console.log(fromResolve);
});
JSON的读取可以移动到另一个函数,对于DRY;但这里的例子更多的是展示如何使用承诺。
一个简单的解决方法是将JSON文件放在本地运行的服务器中。为此,从终端转到您的项目文件夹,并在某些端口号上启动本地服务器,例如8181
python -m SimpleHTTPServer 8181
然后浏览到http://localhost:8181/应该会显示您的所有文件,包括JSON。如果您还没有安装python,请记住安装python。