我已经在我的本地系统中保存了一个JSON文件,并创建了一个JavaScript文件,以便读取JSON文件并打印数据。以下是JSON文件:

{"resource":"A","literals":["B","C","D"]}

假设这是JSON文件的路径:/Users/Documents/workspace/test.json。

谁能帮我写一段简单的代码来读取JSON文件并用JavaScript打印数据?


当前回答

从硬盘加载.json文件是一个异步操作,因此它需要指定一个回调函数在文件加载后执行。

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("/Users/Documents/workspace/test.json", function(text){
    var data = JSON.parse(text);
    console.log(data);
});

这个函数也适用于加载。html或。txt文件,通过覆盖mime类型参数为"text/html", "text/plain"等。

其他回答

正如许多人之前提到的,使用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);

我已经阅读了上面的内容,并注意到通常在项目中有人想要加载多个json文件。在某些情况下是大量的,在某些情况下是“json文件目录”(否则你必须首先生成一个列表才能下载它们)。如果整个项目都是这样,就会变得很混乱。如果json文件中的数据之间有很多关系,这可能会很麻烦。

显然,这都可以用上面的方法来完成,要么把它们做成.js文件,要么通过某种本地抓取来检索它们。

然而,我发现一个有用的替代方案(如果你不想要一个有层次的服务器端解决方案)是首先在Sql Lite数据库中加载你所有的数据。这使得管理更多的数据也更容易一些,你只有一个文件,所有的数据等等。

然后使用web程序集加载sqlite数据库,然后使用常规查询查询数据客户端。这些都可以在客户端完成

下面是一个例子:https://github.com/projectje/bookmarks-sync-sql-cogmios/blob/master/src/html/index.ts(被编译到客户端解决方案的typescript文件)。

在读/写站点中,你可以为每个用户提供一个sqlite数据库,这样你缓存的数据对于该用户是唯一的,等等。

裁判:https://github.com/sql-js/sql.js

您不能对本地资源进行AJAX调用,因为请求是使用HTTP发出的。

一个解决方案是运行一个本地web服务器,提供文件并对localhost进行AJAX调用。

为了帮助你编写代码来读取JSON,你应该阅读jQuery.getJSON()的文档:

http://api.jquery.com/jQuery.getJSON/

2021解决方案(适用于Chrome 91+)

导入JSON文件的JS文件应该是一个模块:

<script type=“module” src=“script.js”></script>

然后在script.js中导入json文件:

从"./data "导入数据。Json: assert {type: " Json "};

您可以使用console.log(data)检查数据是否已加载