如何将文件中的JSON加载到变量中

5
我有一个名为file.json的文件,其内容如下:
{
  "a":{"var1":"Sábado"},
  "b":{"var2":"Domingo"}
}

考虑到我无法编辑file.js,我需要找到一种方法将该文件中包含的json加载到变量mj中,以便alert(mj["a"].var1)向我显示消息Sábado
更新: 是否有可能在不使用JQuery、Prototype或任何其他js库的情况下完成这个任务?

你是在使用node.js,还是这个程序应该在浏览器中运行? - lmjohns3
如果你正在使用jQuery,你可以使用http://api.jquery.com/jQuery.getJSON/。 - digidigo
顺便提一下,file.js 这个名字不太准确,应该改成 file.json - Nabil Kadimi
我编辑了问题和文件名。解决方案不能使用JQuery、node.js或其他js库。 - dev4life
3个回答

1
这是纯JavaScript代码(没有使用eval),甚至可以跨域运行:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "file.js"; /*url of your js/jsonp file */
var head = document.getElementsByTagName('head')[0];
head.insertBefore(script, head.firstChild);

好的,你已经加载了json文件,但是你要如何将json文件的内容存储在变量mj中呢? - dev4life
除非你是芝加哥公牛队,否则你不需要mj,只需alert(a.var1)……但如果你有名为a、b等的全局变量(或局部变量)与json匹配,则可能会出现问题。 - technosaurus
2
如果文件格式为JSONP,那么这将非常有效。但是,如果没有填充{...}将被解析为block,使得在String之后出现:变得意外。 - Jonathan Lonowski
好的观点,上次我在使用不可修改的数据时,不得不将数据包装在callback()中或在服务器端前置一个someVar=...基本代理是这样的:echo $HEADERSTUFF; printf "mj=";cat $THEFILE(如果文件是远程的,则为wget -O - $THEURL)。 - technosaurus

0

您可以使用XMLHttpRequest对象向file.json发起普通的ajax请求。在onreadystatechange函数中编写评估逻辑以接收json并分配到变量中。

评估语句应如下:

var data = eval ('(' + xhr.responseText + ')');

如果您不确定如何使用ajax,请查看以下页面:http://www.w3schools.com/ajax/default.asp

编辑: Jonathan的答案似乎是一种推荐的方法;那个答案当时没有想到。请使用JSON.parse()而不是eval()

var data = JSON.parse(xhr.responseText);

4
这似乎是那些对w3fools做出贡献的例子之一。eval()对此并非必需。可以使用JSON.parse()来代替。 - Jonathan Lonowski

0

嗯,我想到的最简单的方法是创建一个带有JSON源的iframe,并在加载事件中使用JavaScript访问其内容以分配给变量,或者手动实现常见JS框架所做的事情...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接