我对整个 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: unexpected character at line 1 column 1 of the JSON data
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 中的复制粘贴页面,但所有内容都给出相同的错误。
同样按照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);
最佳答案
行 var jsonFile = "/clusters.json";
不会加载文件,它只是创建一个字符串。下一行尝试将字符串解析为 JSON 对象,但事实并非如此。在尝试解析其内容之前,您必须以某种方式加载该文件。
如果您还没有网络服务器,您可能需要一个网络服务器来运行您的网站,并使用 AJAX 加载文件。
关于javascript - JSON.parse 在 JSON 数据的第 1 行开头引发意外字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45841188/