如何在 JavaScript 中读取外部本地 JSON 文件?

IT技术 javascript json
2021-01-19 10:02:38

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

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

比方说,这是JSON文件的路径:/Users/Documents/workspace/test.json

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

6个回答

要使用 javascript 读取外部本地 JSON 文件 (data.json),首先创建您的 data.json 文件:

data = '[{"name" : "Ashwin", "age" : "20"},{"name" : "Abhinandan", "age" : "20"}]';
  1. 在脚本源中提及 json 文件的路径以及 javascript 文件。

    <script type="text/javascript" src="data.json"></script>
    <script type="text/javascript" src="javascrip.js"></script>
    
  2. 从json文件中获取对象

    var mydata = JSON.parse(data);
    alert(mydata[0].name);
    alert(mydata[0].age);
    alert(mydata[1].name);
    alert(mydata[1].age);
    

有关详细信息,请参阅此参考

这不是一个正确的答案。答案中的示例未加载 json 文件。它实际上只是加载另一个 javascript 文件,该文件将一些硬编码的 json 存储为名为data. 如果您从 json 中删除了字符串引号,data.json 您甚至不需要使用JSON.parse. 问题是如何加载 JSON 文件,而不是如何将 JSON 硬编码到另一个 javascript 文件中,然后加载它。
2021-03-12 10:02:38
JSON.parse(window.data);将提供更好scopedata变量信息。
2021-03-15 10:02:38
它对我不起作用,或者我不知道如何利用上述信息。
2021-03-16 10:02:38
如果您可以修改文件,或者文件没有​​正确的 JSON 作为其内容,这将起作用。例如data.json上面的示例内容没有通过验证:jsonlint.com因为它确实是 JavaScript。删除包装单引号会将其变成纯 JavaScript。
2021-03-19 10:02:38
注意: JSON.parse在一些较旧的浏览器中不支持(看着你的 IE)。参见MDN 的浏览器兼容性表window.JSON
2021-03-26 10:02:38

.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"等等。

@mhaseeb 您可以(即使是现在,将来),如果资源与请求系统具有相同的域/协议(这会,因为它是本地的)。查找 CORS。
2021-03-21 10:02:38
您还可以设置rawFile.responseType = 'json';使其自动解析 json 对象,只需确保传递rawFile.response而不是传递rawFile.responseText给回调。
2021-03-25 10:02:38
这是一个非常糟糕的做法!在 Google Chrome 中,您无法向本地资源发出 XmlHttpRequest。
2021-04-08 10:02:38
使用当前的 Chrome 尝试此操作时,我得到“仅协议方案支持跨源请求:http、data、chrome、chrome-extension、https。” - 所以没有文件协议,这里暗示@GreySage
2021-04-08 10:02:38
XMLHttpRequest.status 返回一个数值。这只有效,因为 javascript 在后台做一些事情以使您的代码不会死。应如下所示:rawFile.status === 200
2021-04-09 10:02:38

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

一种解决方法是运行本地网络服务器,提供文件并对本地主机进行 AJAX 调用。

在帮助您编写代码来读取 JSON 方面,您应该阅读以下文档jQuery.getJSON()

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

如果您安装了 python,您可以使用命令行python -m SimpleHTTPServer 8888http://localhost:8888/在浏览器(Windows 或 Mac)中打开8888是端口,可以更改。
2021-03-10 10:02:38
这仅适用于 AJAX:在 Chrome 下并使用 HTML5 的文件 API 我已经做到了。该问题没有询问有关 AJAX 的问题。
2021-03-13 10:02:38
要更新@geotheory 的评论,使用 Python 3 命令是 python -m http.server 8888
2021-03-22 10:02:38
你能指导我在这种情况下如何运行本地服务器吗?我需要做什么才能运行本地服务器?
2021-03-23 10:02:38
你用的是什么环境?视窗?Linux?
2021-04-07 10:02:38

在Node.js的,或在浏览器中使用require.js时,你可以简单地做:

let json = require('/Users/Documents/workspace/test.json');
console.log(json, 'the json obj');

请注意:文件加载一次,后续调用将使用缓存。

@PauliSudarshanTerho Thx,你说得对!在答案中添加了 Node/require.js 的要求。
2021-03-11 10:02:38
不对!Javascript 没有内置的要求
2021-04-01 10:02:38

使用Fetch API是最简单的解决方案:

fetch("test.json")
  .then(response => response.json())
  .then(json => console.log(json));

它在 Firefox 中完美运行,但在 Chrome 中您必须自定义安全设置。

当我尝试这个时,我收到以下错误:(node:2065) UnhandledPromiseRejectionWarning: E​​rror: only absolute urls are supported
2021-03-11 10:02:38