JSON.parse在JSON数据的第1行的开头引发意外的字符错误

时间:2017-08-23 13:30:24

标签: javascript json parsing syntax-error character

我仍然是整个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);

3 个答案:

答案 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可能会有所帮助。

JSON.parse() documentation