我仍然是整个JavaScript环境的新手,我需要帮助将JSON文件解析为JSON对象以读取文件的内容。我一直在阅读很多其他问题和文档,但到目前为止我还没有看到任何与我的问题相关的内容。
首先是这种情况:我有一个名为test.json的文件,该文件应该从服务器传递。但是出于测试目的,它在本地存储为clusters.json
,与我的html文档位于同一文件夹中。 HTML文件的代码:
<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>JSON THINGIE</title>
</head>
<body>
<h1>A Header</h1>
<p id="textone">sample text</p>
<script>
var jsonFile = "/clusters.json";
var jsonObj = JSON.parse(jsonFile);
</script>
</body>
</html>
代码执行直到JSON.parse(jsonTest);
,然后它会抛出此错误(来自mozilla调试工具):
SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符
JSON文件(clusters.json)
{
"occupation":{
"employment":[
{
"id":1,
"cluster_name":"Tekenaar",
"weight":0.5,
"similarity":0.1,
},
{
"id":4,
"cluster_name":"Tekenaar Constructeur",
"weight":0.6,
}
],
"education":[
{
"id":2,
"cluster_name":"HBO",
"weight":1,
},
{
"id":3,
"cluster_name":"HBO",
"weight":1,
}
]
}
}
好的{
左括号是错误的,但JSON文档说明可以使用{
或[
打开文件。
我已经使用多个验证工具检查了我的JSON,甚至使用了JSON Example页面中的copypaste,但所有内容都出现了相同的错误。
同样根据this问题的答案,我首先尝试使用JSON.stringify(jsonTest)
,但无济于事。
我可能做错了什么?任何帮助都表示赞赏,因为我已经花了太多时间在这个错误上。感谢。
编辑1: 确实是我自己的错误,认为使用字符串会使解析器自动加载文件。
无服务器修复:
我成功地使用this question的答案加载了文件中的文本。当我在寻找如何使用file://
时,我到了哪里。
实施修复以供将来参考:
// URL to the file
var jsonFile = 'file:///C://Users//Daan//Projects//Temp Name//clusters.json'
function readTextFile(file) {
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function () {
if (rawFile.readyState === 4) {
if (rawFile.status === 200 || rawFile.status == 0) {
var allText = rawFile.responseText;
// Show alert with the read text.
alert(allText);
}
}
}
rawFile.send(null);
}
readTextFile(jsonFile);
答案 0 :(得分:1)
行var jsonFile = "/clusters.json";
不加载文件,它只是创建一个字符串。下一行是尝试将字符串解析为JSON对象,而不是。在尝试解析其内容之前,您必须以某种方式加载文件。
您可能需要一个网络服务器来运行您的网站,如果您还没有,并使用AJAX加载该文件。
答案 1 :(得分:0)
尝试不使用JSON.parse(xxx)
您可以删除var jsonObj = JSON.parse(jsonFile);
JSON.parse正在尝试以JSON格式转换您的文件,该格式已经是JSON。
只需在代码中使用jsonFile
。
答案 2 :(得分:0)
从您的代码中看起来您试图将JSON.parse()作为参数提供给文件名。 JSON.parse()接受一个字符串。您必须获取文件内容,然后将其传递给JSON.parse()。 This answer可能会有所帮助。